当且仅当 CGPoint 在视图内持续 2 秒时才启动函数

Posted

技术标签:

【中文标题】当且仅当 CGPoint 在视图内持续 2 秒时才启动函数【英文标题】:Initiate a function if and only if a CGPoint is within a view for 2 seconds 【发布时间】:2016-07-29 12:56:44 【问题描述】:

在情节提要中,我有一个 ViewController 叫 home。

Home 有一个红色的UIView 作为子视图,位于 Home 的中心。

Red View 有一个 LongPressGestureRecognizer,激活后用户可以在屏幕上移动红色视图。

当用户将红色视图移到屏幕左侧足够近时,会弹出一个UIView Sidebar

侧边栏中的 n 具有独特的颜色 subviews

当用户在彩色子视图的框架内移动红色视图时,颜色 mix 和红色视图触摸到的侧边栏中的颜色会改变颜色。它变成了混合体。

`

 func handleAuditioneeLongPress(sender: UILongPressGestureRecognizer) 
        switch sender.state 
        case .Began:
            hideSideBar()
        case .Changed:
            let touchPoint = sender.locationInView(self.view)
            thumbnailTrackTouchPoint(touchPoint)
        case .Ended:
            let dropPoint = sender.locationInView(self.view)
            thumbnailWasDropped(dropPoint)
        default:
            break
        
    
func thumbnailTrackTouchPoint(touchPoint: CGPoint)
      UIView.setAnimationsEnabled(true)
      UIView.animateWithDuration(0.03, delay: 0.0, options: [.BeginFromCurrentState, .CurveEaseOut], animations: 
                self.red.center.x = touchPoint.x
            self.red.center.y = touchPoint.y - 50
            , completion: nil)
     if touchPoint.x < 30
         showSidebar()
         isSidebarOut = true
      
     if isSidebarOut 
            if touchPoint.x > 135 
                hideSideBar()
                isSidebarOut = false
            

            let location = self.view.convertPoint(touchPoint, toView: sidebar)
            let subview = sidebar.hitTest(location, withEvent: nil)
            if( subview != nil) 
            if let coloredIconController = self.sidebarController.viewToColoredIconController[subview!]


/*
if coloredIconController.view.frame.contains(location) for more than 2 seconds mix the colors
*/

` 当用户操纵侧边栏时,我不希望意外混合。

所以我想要一个检查条件。当且仅当接触点已包含在彩色视图中 2 秒时,红色才应混合。

【问题讨论】:

thumbnailTrackTouchPoint 中,您可以添加仅在更改时发生的保存日期参数,如果超出限制,则将其删除,无论设置是否明智。然后,当结束时,您可以检查差异是否超过 2 秒。 在你进入区域触发定时定时器时运行的方法与混合方法,在你离开该区域时运行的方法中,如果它还不是 nil,则使定时器无效 【参考方案1】:

当点进入视图时启动预定计时器

myTimer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "mixing method", userInfo: userInfo, repeats: false)

当 cgpoint 出来的时候你就可以了

if myTimer != nil 
   myTimer.invalidate()

【讨论】:

以上是关于当且仅当 CGPoint 在视图内持续 2 秒时才启动函数的主要内容,如果未能解决你的问题,请参考以下文章

当且仅当区域在 Emacs 中处于活动状态时,标记是不是处于活动状态?

当且仅当它在 React Native 中返回 null 时,如何使函数再次运行?

甲骨文:SQL;当且仅当一列更改时选择不同的记录

强制 Emacs 使用特定的编码,当且仅当这不会导致问题

当且仅当 ContactsContract.Contacts.CONTENT_URI 更改时,ContentObserver 应该调用

欧拉回路