簡體   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