Ios 为什么重复UIView动画在边缘滑动时冻结?
我试图创建一个从右向左连续滚动图像的视图,有效地创建一个无限滚动的背景。我使用两个相邻的图像视图,并使用Ios 为什么重复UIView动画在边缘滑动时冻结?,ios,swift,core-animation,Ios,Swift,Core Animation,我试图创建一个从右向左连续滚动图像的视图,有效地创建一个无限滚动的背景。我使用两个相邻的图像视图,并使用ui视图动画设置为。重复,以负水平偏移平移帧。(代码如下) 它工作得很好!在尝试在导航控制器中进行边缘滑动之前,动画将冻结: 我的代码如下所示: class ScrollingImageView: UIView { required init?(coder aDecoder: NSCoder) { fatalError() } let imageView = UIImage
ui视图
动画设置为。重复
,以负水平偏移平移帧。(代码如下)
它工作得很好!在尝试在导航控制器中进行边缘滑动之前,动画将冻结:
我的代码如下所示:
class ScrollingImageView: UIView {
required init?(coder aDecoder: NSCoder) { fatalError() }
let imageView = UIImageView()
let imageView2 = UIImageView()
override init(frame: CGRect) {
super.init(frame: frame)
imageView.image = UIImage(named: "mario")
imageView2.image = UIImage(named: "mario")
imageView.frame = bounds
imageView2.frame = CGRectOffset(bounds, bounds.width, 0)
addSubview(imageView)
addSubview(imageView2)
}
func play() {
UIView.animateWithDuration(5, delay: 0, options: [.Repeat, .CurveLinear], animations: {
self.imageView.frame = CGRectOffset(self.imageView.frame, -self.bounds.width, 0)
self.imageView2.frame = CGRectOffset(self.imageView2.frame, -self.bounds.width, 0)
}, completion: nil)
}
}
为什么此交互开始时动画停止?我认为这与互动手势有关,它将
CALayer
上的速度设置为零。有没有办法让这个动画继续播放?正如您正确地说的,您使用的是一种互动手势。它是如何工作的?它冻结动画(层<代码>速度代码>为零)并更改其“帧”(层<代码>时间偏移代码>)以匹配手势的当前位置
为了解决这个问题,你也许可以把动画放到另一个层,尽管我不确定。我确信,这种方式可以自己实现整个自定义转换交互——不使用UIPercentDriventerActiveTransition(冻结动画),而是在转换过程中自己定位视图“我认为这与互动手势有关,将CALayer上的速度设置为零“宾果!这就是交互手势的工作原理。@matt有没有办法让这个动画不参与交互手势?我曾经考虑过自己使用
CADisplayLink
来编排这些帧,但这看起来很难看。有什么建议吗?我会走另一条路:做你自己的互动手势。请看我的答案…相关:这感觉真是太过分了,因为这只是一个标准的导航控制器和转换。在我的实际应用程序中,它只是一个相当复杂的视图树中的一个项目,因此视图控制器会跳过几层抽象来为这个视图做一些特殊的事情。另外,我应该在原始问题中包括这一点,当我将应用程序发送到后台时,动画也会停止,然后把它带回到前台。这是同一个问题,还是另一个问题?(有趣的是,UIActivityIndicatorView
在交互转换期间也会暂停,但在恢复后台应用程序时不会冻结)“另外,我应该在原始问题中包含这一点,当我将应用程序发送到后台,然后将其返回前台时,动画也会停止。这是同一个问题,还是另一个问题“不,这很正常。当你进入后台时,动画会被取消。这取决于你在进入前台时是否继续。当然,这“感觉太过分了。”“。然而,没有神奇的方法可以阻止运行时执行它通常执行的操作。如果你对此足够关心,那么我的建议可能就是你必须要做的。