【发布时间】:2016-01-12 07:44:02
【问题描述】:
您在下面看到的代码创建了一个 CALayer(矩形形状),并在用户按住屏幕时从左到右对其进行动画处理(longPressGestureRecognizer)。当他们抬起手指时,CALayer 停止动画。您可以直接在新项目中复制粘贴代码:
//Global Variables
var layer: CALayer?
var holdGesture = UILongPressGestureRecognizer()
let animation = CABasicAnimation(keyPath: "bounds.size.width")
func setUpView() {
self.view.addGestureRecognizer(holdGesture)
holdGesture.addTarget(self, action:"handleLongPress:")
}
func handleLongPress(sender : UILongPressGestureRecognizer) {
if(sender.state == .Began) {
let newLayer = CALayer()
newLayer.frame = CGRect(x: 0, y: 0, width: 0, height: 10)
newLayer.backgroundColor = UIColor.redColor().CGColor
animation.fromValue = 0
animation.toValue = self.view.bounds.width * 2
animation.duration = 5
self.view.layer.addSublayer(newLayer)
print("Long Press Began")
newLayer.addAnimation(animation, forKey: "bounds.size.width")
layer = newLayer
}
else {
print("Long press ended")
if let layer = layer {
pauseLayer(layer)
}
}
}
func pauseLayer(layer : CALayer){
let pausedTime : CFTimeInterval = layer.convertTime(CACurrentMediaTime(), fromLayer: nil)
layer.speed = 0.0
layer.timeOffset = pausedTime
}
当“长按结束”发生时(用户抬起手指),图层会有一个新的宽度。但是,当我打印它时,它会显示它的“0.0”。我不知道为什么。动画后如何获取图层的宽度?
【问题讨论】:
标签: ios swift calayer caanimation