Tag: uipangesturerecognizer

如何通过平移手势限制可移动的视图

我有一个UIImageView可以通过平移手势移动。 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; [self.photoMask addGestureRecognizer:pan]; 我想限制可以在屏幕上移动的区域。 而不是用户能够将视图拖到屏幕的一侧,我想限制它的某种边缘。 我怎样才能做到这一点? 另外,这是如何处理时,旋转? 编辑— #pragma mark – Gesture Recognizer -(void)handlePan:(UIPanGestureRecognizer *)gesture { NSLog(@"Pan Gesture"); gesture.view.center = [gesture locationInView:self.view]; } 这是我目前处理泛的方法。 我需要做的是继续移动中心点的图像视图,并限制其靠近屏幕边缘的运动,例如50。

ios UICollectionView检测滚动方向

我有一个collectionView。 我想检测滚动方向。 我有一个两个不同的animation风格,向下滚动和向上滚动。 所以我必须学习滚动方向。 CGPoint scrollVelocity = [self.collectionView.panGestureRecognizer velocityInView:self.collectionView.superview]; if (scrollVelocity.y > 0.0f) NSLog(@"scroll up"); else if(scrollVelocity.y < 0.0f) NSLog(@"scroll down"); 这只是在手指触摸工作。 不为我工作

快速检测两个UIView的碰撞

我有两个UIViews在我的ViewController。 我将panGesture添加到第一个视图,当我开始移动这个视图时,第二个视图将会移向第一个视图。 当这两个视图发生冲突时,我想检测一个事件。 这是我的代码。 @IBAction func dragFirstView(sender: UIPanGestureRecognizer) { let translation = sender.translationInView(self.view) dispatch_async(dispatch_get_main_queue()) { () -> Void in UIView.animateWithDuration(2.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: { self.secondView.frame = CGRectMake(sender.view!.center.x + translation.x, sender.view!.center.y + translation.y, self.secondView.frame.size.width, self.secondView.frame.size.height) }, completion: nil) } sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) sender.setTranslation(CGPointZero, inView: self.view) }

将UIPanGestureRecognizer和UISwipeGestureRecognizer添加到相同视图会导致设置requireGestureToFail

我在相同的视图中添加了滑动手势识别器和平移手势识别器。 这些手势应该是相互排斥的。 为了做到这一点,我添加了滑动手势的约束 [swipeGesture requireGestureToFail:panGesture]; (因为平移手势应该优先) 问题在于平移手势总是被调用 – 即使在非常快速的滑动过程中也是如此。 为了达到这个目的,我把自己定位为泛姿态的代表。 在委托方法中,我设置了一些代码如下: – (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { // check if it is the relevant view if (gestureRecognizer.view == self.myViewWithTwoGestures) { // check that it is the pan gesture if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer; CGPoint velocity = [pan velocityInView:gestureRecognizer.view]; // added an arbitrary […]

意外的零窗口在_UIApplicationHandleEventFromQueueEvent,_windowServerHitTestWindow

我试图在iPad上设置iOS 8的边缘滑动手势,但得到和错误似乎是一个错误。 我有以下代码: UIScreenEdgePanGestureRecognizer *edgeRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightEdgeSwipe:)]; edgeRecognizer.edges = UIRectEdgeRight; [self.view addGestureRecognizer:edgeRecognizer]; 然后我处理这个手势: -(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender { //slide in view code here } 问题是它没有检测到每次正确的边缘滑动。 有时它会多次检测到它。 无论是否检测到,在iPad上滑动右边缘时,总是会在控制台中显示以下信息: 2014-10-07 00:04:40.386 Office日志[1531:500896]意外的nil窗口在_UIApplicationHandleEventFromQueueEvent,_windowServerHitTestWindow:中; 层=> 这个消息是什么意思,我该如何解决这个问题,以便一致地检测到正确的边缘滑动?