我使用UIBezierPath
对CAKeyFrameAnimation
进行动画制作'UIView'。
let arcAnimation = CAKeyframeAnimation(keyPath: "position")
arcAnimation.duration = 0.5
let finalSize : CGFloat = 50
let radiusOffset = CGFloat((position - 1) * 10) + finalSize/2
let radius: CGFloat = 20 * CGFloat(position) + radiusOffset
let center = CGPoint(x:item.bounds.size.width/2 + bounds.size.width/2,
y: radius + item.bounds.size.height/2)
let topAngle: CGFloat = .pi * 3/2
let bottomAngle: CGFloat = .pi/2
let path = UIBezierPath(arcCenter: center,
radius: radius,
startAngle: bottomAngle,
endAngle: topAngle,
clockwise: !reverse)
arcAnimation.path = path.cgPath
arcAnimation.isRemovedOnCompletion = false
arcAnimation.fillMode = kCAFillModeForwards
arcAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
此动画合并为CAAnimationGroup
,之后一切都很顺利。我的问题是:当动画结束时,表示层框架x
的{{1}}和y
值很奇怪,调试position
它们都显示view.layer.presentation()?.frame
并(-25.0, -25.0, 50.0, 50.0)
显示view.layer.presentation()?.position
。我需要这些位置来检测动画视图的可见区域内的触摸。
所以我的问题是:
为什么动画结束后会显示这些值?我如何得到合适的?
我正在使用(0,0)
hitTest
上的view.layer.presentation()
检测视频上的触摸,还有其他更简单的解决方案吗?