В приведенном ниже коде я пытаюсь анимировать CALayer с левой стороны экрана в правой части экрана, когда пользователь удерживает экран (longPressGestureRecognizer). Когда пользователь поднимает палец, CALayer приостанавливается.Swift: Animate CALayer
var l = CALayer()
var holdGesture = UILongPressGestureRecognizer()
let animation = CABasicAnimation(keyPath: "bounds.size.width")
override func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
setUpView()
}
func setUpView(){
l.frame = CGRect(x: 0, y: 0, width: 0, height: 10)
l.backgroundColor = UIColor.redColor().CGColor
self.view.addGestureRecognizer(holdGesture)
holdGesture.addTarget(self, action:"handleLongPress:")
}
func handleLongPress(sender : UILongPressGestureRecognizer){
//User is holding down on screen
if(sender.state == .Began){
print("Long Press Began")
animation.fromValue = 0
animation.toValue = self.view.bounds.maxX * 2
animation.duration = 30
self.view.layer.addSublayer(l)
l.addAnimation(animation, forKey: "bounds.size.width")
}
//User lifted Finger
else{
print("Long press ended")
print("l width: \(l.bounds.size.width)")
pauseLayer(l)
}
}
func pauseLayer(layer : CALayer){
var pausedTime : CFTimeInterval = layer.convertTime(CACurrentMediaTime(), fromLayer: nil)
layer.speed = 0.0
layer.timeOffset = pausedTime
}
У меня есть два вопроса:
1) Когда я напечатать ширину CALayer после анимации (когда пользователь поднимает палец) его всегда 0. анимировать ширину, и его расширения, таким образом, я не знаю, почему он не дает мне новую ширину CALayer.
2) После того, как пользователь поднимет свой палец, а затем снова сдерживается, CALayer исчезает. Мне нужно, чтобы он оставался на экране и создавал еще один CALayer, я никоим образом не удаляю его, поэтому я не понимаю, почему он также исчезает. Я проверил память, объект все еще существует.
UPDATE to issue # 2: Я считаю, что для создания другого CALayer я не могу просто добавить слой снова, я должен либо создать копию, либо создать UIView, к которому я могу добавить слой. Я все еще не понимаю, почему он исчезает.
Перед тем, как оживить его, вы должны установить целевую привязку к слою. – Shripada
Спасибо за ответ! Что именно ты имеешь ввиду? Не могли бы вы ответить на вопрос? Некоторые говорили, что я должен создать копию CALayer. @Shripada – OriginalAlchemist
Я попытался ответить, проверьте это - @ originalAlchemist – Shripada