[英]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.