[英]Animate UIImageView Diagonally
我希望能夠以對角線方式為UIImageView背景設置動畫。 這意味着背景會從屏幕的左上角朝屏幕右下角動畫並滾動。 理想情況下,這將是連續動畫。
我已經弄清楚了指示,但是,我似乎要復制背景並在靜態背景上設置動畫。 這導致了怪異的效果。
看到gif:
這是代碼:
var imageView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
self.setup();
}
func setup() {
self.imageView.frame = self.view.bounds
self.imageView.image = UIImage(named: "myimage.jpg")
self.view.addSubview(self.imageView)
self.scroll()
}
func scroll() {
var theImage = UIImage(named: "myimage.jpg")!
var pattern = UIColor(patternImage: theImage)
var layer = CALayer()
layer.backgroundColor = pattern.CGColor
layer.transform = CATransform3DMakeScale(1,-1,1)
layer.anchorPoint = CGPointMake(0, 1)
var viewSize = self.imageView.bounds.size
layer.frame = CGRectMake(0,0, theImage.size.width + viewSize.width, viewSize.height)
self.imageView.layer.addSublayer(layer)
var startPoint = CGPointZero
var endPoint = CGPointMake(theImage.size.width, theImage.size.height + 15)
var animation = CABasicAnimation(keyPath: "position")
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
animation.fromValue = NSValue(CGPoint:startPoint)
animation.toValue = NSValue(CGPoint:endPoint)
animation.repeatCount = Float.infinity
animation.duration = 1.0
layer.addAnimation(animation, forKey: "position")
}
有誰能弄清楚如何使整個背景滾動? 我是否只需要放大圖像並滾動? 在這種情況下,需要將imageView的contentMode設置為什么?
謝謝
----更新
我對代碼進行了一些重新設計,並獲得了所需的工作版本。 我很好奇一些反饋,因為我總體上還是不太滿意動畫(但我正在學習!:))
-我總體上刪除了整個背景圖像,因為DuncanC認為這沒有用。 現在,我只是制作一個圖像層,嘗試使其足夠大,然后循環播放動畫。 有什么想法嗎?
override func viewDidLoad() {
super.viewDidLoad()
self.scroll()
}
func scroll() {
var theImage = UIImage(named: "myimage.jpg")!
var pattern = UIColor(patternImage: theImage)
var layer = CALayer()
layer.backgroundColor = pattern.CGColor
layer.transform = CATransform3DMakeScale(1,-1,1)
layer.anchorPoint = CGPointMake(0, 1)
// i'm making the view large here so the animation can keep running smoothly without
// showing what is behind our image
// is there a better way to do this?
var viewSize = CGSizeMake(self.view.bounds.size.height * 10, self.view.bounds.size.width * 10)
layer.frame = CGRectMake(0,0, theImage.size.width + viewSize.width, viewSize.height)
self.view.layer.addSublayer(layer)
var startPoint = CGPointMake(-theImage.size.width, -theImage.size.height)
var endPoint = CGPointMake(0, 0)
var animation = CABasicAnimation(keyPath: "position")
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
animation.fromValue = NSValue(CGPoint:startPoint)
animation.toValue = NSValue(CGPoint:endPoint)
animation.repeatCount = Float.infinity
animation.duration = 3.0
layer.addAnimation(animation, forKey: "position")
}
**結果:*
您的代碼沒有多大意義。 您有一個包含圖像myimage.jpg的圖像視圖,然后創建一個包含該圖像作為圖案顏色的CALayer。 您可以將圖層添加到圖像視圖中並對其位置進行動畫處理。
只需使用UIView動畫並直接為圖像視圖的中心設置動畫即可。 如果使用的是AutoLayout,則需要添加水平和垂直位置約束,將它們連接為IBOutlets,然后在動畫塊中更改約束並在圖像視圖的超級視圖上調用layoutIfNeeded()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.