当它碰到窗口的边界时,让我的UIView在另一个方向上制作动画

时间:2016-05-09 00:35:53

标签: ios animation uiview core-graphics

我想知道是否有一种更简单的方法可以让我的视图在我的视图帧离开窗口的同时以相反的方向制作动画。

我在想做类似的事情:

let x = CGFloat(Int(arc4random_uniform(UInt32(self.view.frame.maxX))))
let y = CGFloat(Int(arc4random_uniform(UInt32(self.view.frame.maxY))))
let label = UILabel(frame: CGRectMake(x,y, 50, 50))
label.text = "omnomnom"
label.sizeToFit()
let animateTimer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(animateLabel), userInfo: nil, repeats: true)

animateLabel的位置:

// Assuming that I have an instance variable of the label
if(label.layer.presentationLayer()?.frame.minX <= self.frame.minX
   && label.layer.presentationLayer()?.frame.maxY <= self.frame.maxY) {
    // Then grow in every direction but the left direction 
}
else if (label.layer.presentationLayer()?.frame.minX <= self.frame.minX) {
    // Then grow in every direction but the left direction bottom direction
}
...

但我应该使用哪个CGAfflineTransform来指定这些方向的变换,但是我似乎无法找到正确的变换。

此外,是否有更简洁的方法通过一些Core Animation API执行此操作?或者这是唯一的方法吗?

修改 因此,似乎我的问题被误解了,我希望视图能够像CGAfflineTransformMakeScale(2,2)那样增长。但这样做会导致标签在窗口边缘附近出现时离开屏幕。所以我想知道是否有一个我可以使用的CG API,这样我就不必每次检查我的标签的框架,然后再确定它应该增长的方式

1 个答案:

答案 0 :(得分:0)

我建议做一个UIView关键帧动画。 (使用UIView animateKeyframesWithDuration:delay:options:animations:completion:方法。)

您可以设置一系列关键帧,将视图移动到窗口的第一个边缘,然后移动到另一个边缘。

我在Github上有一个名为KeyframeViewAnimations的项目,它演示了UIView关键帧动画和等效的核心动画技术。