在 UIView.animateWithDuration() 期间启用手势识别器的用户交互
Enable user interaction for gesture recognizer during UIView.animateWithDuration()
我有一个包含多个矩形子视图 (B) 的视图 (A)。这些子视图中的每一个都有一个点击识别器来触发一个动作。父视图 A 也有一个单击识别器,它调用 A 的控制器上的一个函数,使每个子视图 B 以一种颜色闪烁。这是函数:
@IBAction func highlightAreas(recognizer: UITapGestureRecognizer) {
for area in buttons {
// only show linked areas
if area.targetPage != nil {
let oldColor = area.backgroundColor
// show areas with animation
UIView.animateWithDuration(HIGHLIGHT_ANIMATION_TIME, animations: { Void in // begin of closure
area.backgroundColor = self.HIGHLIGHT_BACKGROUND_COLOR.colorWithAlphaComponent(self.HIGHLIGHT_ALPHA)
}) // end of closure
// hide areas with animation
UIView.animateWithDuration(HIGHLIGHT_ANIMATION_TIME, animations: { Void in // begin of closure
area.backgroundColor = oldColor?.colorWithAlphaComponent(0.0)
}) // end of closure
}
}
}
它有效,但在动画期间,子视图 B 不会触发它们的单击事件。我如何才能在动画期间检测到该单击?
你必须使用
animateWithDuration(_ duration: NSTimeInterval,
delay: NSTimeInterval,
options: UIViewAnimationOptions,
animations: () -> Void,
completion: ((Bool) -> Void)?)
为此。并提供 AllowUserInteraction
作为允许用户在动画期间与视图交互的选项。
有关更多选项,请参阅 the docs。
我有一个包含多个矩形子视图 (B) 的视图 (A)。这些子视图中的每一个都有一个点击识别器来触发一个动作。父视图 A 也有一个单击识别器,它调用 A 的控制器上的一个函数,使每个子视图 B 以一种颜色闪烁。这是函数:
@IBAction func highlightAreas(recognizer: UITapGestureRecognizer) {
for area in buttons {
// only show linked areas
if area.targetPage != nil {
let oldColor = area.backgroundColor
// show areas with animation
UIView.animateWithDuration(HIGHLIGHT_ANIMATION_TIME, animations: { Void in // begin of closure
area.backgroundColor = self.HIGHLIGHT_BACKGROUND_COLOR.colorWithAlphaComponent(self.HIGHLIGHT_ALPHA)
}) // end of closure
// hide areas with animation
UIView.animateWithDuration(HIGHLIGHT_ANIMATION_TIME, animations: { Void in // begin of closure
area.backgroundColor = oldColor?.colorWithAlphaComponent(0.0)
}) // end of closure
}
}
}
它有效,但在动画期间,子视图 B 不会触发它们的单击事件。我如何才能在动画期间检测到该单击?
你必须使用
animateWithDuration(_ duration: NSTimeInterval,
delay: NSTimeInterval,
options: UIViewAnimationOptions,
animations: () -> Void,
completion: ((Bool) -> Void)?)
为此。并提供 AllowUserInteraction
作为允许用户在动画期间与视图交互的选项。
有关更多选项,请参阅 the docs。