当且仅当 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 时,如何使函数再次运行?
当且仅当 ContactsContract.Contacts.CONTENT_URI 更改时,ContentObserver 应该调用