前端之家收集整理的这篇文章主要介绍了
swift – 动画滞后于设备,但不在模拟器中,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
403_0@
我想用Button触发CAAnimation.在游乐场和模拟器中,这完全符合我的要求.但是,当我在设备上运行相同的
代码时,动画仅在短暂延迟后发生.
显然,这个问题只发生在iOS 11.2.6上.我更新了我的设备,现在无法重现该问题.任何人都可以确认或了解它如何在iOS 11.2.6上运行?
import UIKit
class MyViewController : UIViewController {
let animatedView = UIView()
override func loadView() {
let view = UIView()
view.backgroundColor = .white
// Add a button
let button = UIButton(type: .system)
button.frame = CGRect(x: 150,y: 200,width: 200,height: 50)
button.setTitle("Animate",for: .normal)
button.addTarget(self,action: #selector(tap),for: .touchUpInside)
// Set color and frame of the view,that is animated.
animatedView.backgroundColor = UIColor.blue
animatedView.frame = CGRect(x: 50,y: 50,width: 50,height: 50)
// Add the views to the view hierarchy
view.addSubview(animatedView)
view.addSubview(button)
self.view = view
}
/// On Tap create an animation,that changes the position of the animated view.
@objc func tap() {
let originalY = animatedView.layer.position.y
let animation = CABasicAnimation(keyPath: "position.y")
animation.fromValue = originalY
animation.toValue = 300.0
animation.duration = 1.0
animatedView.layer.add(animation,forKey: "positionAnimation")
}
}
Can you try this code with iOS 11.2.9,I have tested your code and it’s working fine.
// MARK: Animations
public extension CALayer {
var ani: CAAnimation {
let startPointAnim = CABasicAnimation(keyPath: #keyPath(CAGradientLayer.startPoint))
startPointAnim.fromValue = CGPoint(x: 0,y: 0.0)
startPointAnim.toValue = CGPoint(x:0,y: 300)
let endPointAnim = CABasicAnimation(keyPath: #keyPath(CAGradientLayer.endPoint))
endPointAnim.fromValue = CGPoint(x: 0,y: 0)
endPointAnim.toValue = CGPoint(x:2,y: 300)
let animGroup = CAAnimationGroup()
animGroup.animations = [startPointAnim,endPointAnim]
animGroup.duration = 1.0
animGroup.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
return animGroup
}
func playAnimation(_ anim: SkeletonLayerAnimation,key: String) {
recursiveSearch(inArray: skeletonSublayers,leafBlock: { add(anim(self),forKey: key) }) {
$0.playAnimation(anim,key: key)
}
}
func stopAnimation(forKey key: String) {
recursiveSearch(inArray: skeletonSublayers,leafBlock: { removeAnimation(forKey: key) }) {
$0.stopAnimation(forKey: key)
}
}
}