繁体   English   中英

对角动画UIImageView

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM