在 UIView.animateWithDuration() 期间启用手势识别器的用户交互

Posted

技术标签:

【中文标题】在 UIView.animateWithDuration() 期间启用手势识别器的用户交互【英文标题】:Enable user interaction for gesture recognizer during UIView.animateWithDuration() 【发布时间】:2015-06-07 20:37:35 【问题描述】:

我有一个包含多个矩形子视图 (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 不会触发它们的单击事件。如何在动画期间检测到单击?

【问题讨论】:

【参考方案1】:

你必须使用

animateWithDuration(_ duration: NSTimeInterval,
                         delay: NSTimeInterval,
                       options: UIViewAnimationOptions,
                    animations: () -> Void,
                    completion: ((Bool) -> Void)?)

为此。并提供AllowUserInteraction 作为选项,以允许用户在动画期间与视图进行交互。 更多选项请参见the docs。

【讨论】:

以上是关于在 UIView.animateWithDuration() 期间启用手势识别器的用户交互的主要内容,如果未能解决你的问题,请参考以下文章

NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据