[英]iOS Animation Block Gesture Recognizer
我有一个 UICollectionView 包含许多包含视图的单元格,这些视图可以从集合视图中拖出/拖放到集合视图之外的不同视图中。 这个过程工作正常。 但是,当拖动的视图被放到它的新位置时,我想通过将拖动视图缩放到其完整大小然后回到零,然后将其从超级视图中删除来为放置设置动画。 当我拖动其他对象时,这适用于应用程序的其他区域,但这是唯一一个涉及集合视图的区域。
[UIView animateWithDuration:0.375
animations:^{ dragView.transform = CGAffineTransformMakeScale (1.0f, 1.0f); dragView.transform = CGAffineTransformMakeScale(0.0f, 0.0f); }
completion:^(BOOL finished) { [dragView removeFromSuperview]; } ];
如果我不使用完成块,动画就会失败,大概是因为在动画完成之前移除了视图。 但是如果我确实使用完成块,当动画完成时,后续的平移手势(用于滚动集合视图)将传递给我的视图控制器中用于其他事情的平移手势识别器,而不是滚动集合视图。 因此,动画播放后,集合视图显示为“锁定”。 如果我删除完成块,之后不会出现手势识别问题,但动画也不起作用。
我试过在动画结束后在集合视图上设置 userInteractionEnabled=YES,但它没有帮助。
有什么建议么? TIA
天哪,你对 2 个相同类型的同步动画有什么期望? 也许这是一个解决方案?
第一个动画调用:
[UIView animateWithDuration:0.375
animations:^{ dragView.transform = CGAffineTransformMakeScale (1.0f, 1.0f); }
completion:^(BOOL finished) { /*call the second animation*/ } ];
第二个动画调用:
//second animation
[UIView animateWithDuration:0.375
animations:^{ dragView.transform = CGAffineTransformMakeScale(0.0f, 0.0f); }
completion:^(BOOL finished) { [dragView removeFromSuperview]; } ];
在 Swift 5.0,iOS 13+ 中,将.allowUserInteraction
添加到动画选项,然后动画不会阻止手势识别器。
UIView.animate(
withDuration: 0.375,
delay: 0,
options: [.curveEaseOut, .allowUserInteraction],
animations: {
dragView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
dragView.transform = CGAffineTransform(scaleX: 0.0, y: 0.0)
},
completion: {_ in dragView.removeFromSuperview()})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.