我正在转移我的观点 UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveRight:)]; [panRecognizer setMinimumNumberOfTouches:1]; [panRecognizer setMaximumNumberOfTouches:1]; [panRecognizer setDelegate:self]; [bubbleView[rightCnt] addGestureRecognizer:panRecognizer]; [panRecognizer release]; 现在,我想通过长按拖动来做同样的事情。 任何想法?
我是手势识别器的新手,所以也许这个问题听起来很愚蠢:我将轻拍手势识别器分配给一堆UIViews。 在这个方法中,有可能找出哪个是被点击的,或者我需要使用屏幕上的点来找出它? for (NSUInteger i=0; i<42; i++) { float xMultiplier=(i)%6; float yMultiplier= (i)/6; float xPos=xMultiplier*imageWidth; float yPos=1+UA_TOP_WHITE+UA_TOP_BAR_HEIGHT+yMultiplier*imageHeight; UIView *greyRect=[[UIView alloc]initWithFrame:CGRectMake(xPos, yPos, imageWidth, imageHeight)]; [greyRect setBackgroundColor:UA_NAV_CTRL_COLOR]; greyRect.layer.borderColor=[UA_NAV_BAR_COLOR CGColor]; greyRect.layer.borderWidth=1.0f; greyRect.userInteractionEnabled=YES; [greyGridArray addObject:greyRect]; [self.view addSubview:greyRect]; NSLog(@"greyGrid: %i: %@", i, greyRect); //make them touchable UITapGestureRecognizer *letterTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(highlightLetter)]; letterTapRecognizer.numberOfTapsRequired = 1; [greyRect addGestureRecognizer:letterTapRecognizer]; }
我想添加一些逻辑,当用户移动地图视图,即他做一个平底锅。 但是,当我添加手势识别器,我想logging触摸,没有任何反应。 当我在另一个视图控制器尝试它,并将识别器添加到控制器的视图,那么它工作正常。 这里是我的代码(地图视图是应用程序委托的属性,因为即使它不可见,我也需要做一些其他的事情): – (void)viewDidLoad { … UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(showPan)]; [appDelegate.mapView addGestureRecognizer:panGesture]; [panGesture release]; } – (void)showPan { NSLog(@"pan!"); } 我使用最新的iOS 4.2.1 感谢您的任何build议。
我有一个UIStoryboard与不同的UIViewControllers ,我想添加另一个UIViewController (如仪表板),当用户从左侧滑动iPad的仪表板将出现,然后当他向后滑动当前视图将被恢复。 这可能吗? 如果是的话提示如何做或UIGestureRecognizer任何好的教程? 谢谢。
问题 在我的iPad应用程序中, 只有在按住事件之后,才能将popup窗口附加到button栏项目。 但是这似乎是撤销/重做的标准。 其他应用程序如何做到这一点? 背景 我有我的UIKit(iPad)应用程序工具栏中的撤消button(UIBarButtonSystemItemUndo)。 当我按下撤消button,它会触发它的撤消操作,并正确执行。 然而,在iPad上撤销/重做的“标准UE约定”是按下撤销执行撤消操作,但按住button显示一个popup式控制器,用户在撤销控制器之前select“撤消”或“重做”。 使用presentPopoverFromBarButtonItem来附加popover控制器的正常方法是:我可以很容易地configuration它。 为了让这个只在按下之后才显示,我们必须设置一个视图来响应“长按”手势事件,如下面的代码片段所示: UILongPressGestureRecognizer *longPressOnUndoGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnUndoGesture:)]; //Broken because there is no customView in a UIBarButtonSystemItemUndo item [self.undoButtonItem.customView addGestureRecognizer:longPressOnUndoGesture]; [longPressOnUndoGesture release]; 有了这个,在view上按下并按住handleLongPressOnUndoGesture:方法之后,将调用此方法,我将configuration并显示撤销/重做的popup窗口。 到现在为止还挺好。 这个问题是没有意见的 。 self.undoButtonItem是一个UIButtonBarItem,而不是一个视图。 可能的解决scheme 1)[理想] 将手势识别器附加到button栏项目 。 可以将一个手势识别器附加到一个视图,但UIButtonBarItem不是一个视图。 它具有.customView的属性,但是当buttonbaritem是标准系统types(在这种情况下)时,该属性为零。 2) 使用另一个视图 。 我可以使用UIToolbar,但是这需要进行一些奇怪的命中testing,并且如果可能的话,还是可以的。 没有其他可供select的使用方法,我可以想到。 3) 使用customView属性 。 像UIBarButtonSystemItemUndo这样的标准types没有customView(它是零)。 设置customView会删除它需要的标准内容。 这相当于重新实现了UIBarButtonSystemItemUndo的所有外观和function,如果可能的话。 题 […]
我有一个观点,我应用UIPanGestureRecogniser到这个视图: UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAnim:)]; [sliderView addGestureRecognizer:panGesture]; [panGesture release]; 我可以检测和处理手势就好了。 不过,一旦手势结束,我希望启动另一种方法。 我知道有两种方法可以进行这种检测。 然而,触摸已经touchesEnded并touchesCancelled ,我发现只要触摸变成一个手势,触摸touchesCancelled就会被调用,即我将手指移动到足以保证一个手势调用,并很less接触到已touchesEnded ,如果有的话,被调用。 我希望能够平移左/右,然后启动手势结尾的另一个函数调用。 我该怎么做呢?
我有一个UIPanGestureRecognizer我用来跟踪用户的手指下的对象( UIImageView )。 我只关心X轴上的运动,如果触摸在Y轴上的对象框架的上方或下方偏离,我想要结束触摸。 我有我需要的一切来确定一个触摸是否在对象的Y边界内,但我不知道如何取消触摸事件。 翻转识别器的cancelsTouchesInView属性似乎没有做我想要的。 谢谢!
好的,我一直在环视太阳下的所有选项来捕捉多点触控手势,最后我来到了UIPanGestureRecognizer。 我想要的function非常简单。 我已经设置了两个手指平移手势,并且我希望能够通过一些图像进行随机移动,具体取决于我移动的像素数。 我有所有的工作好,但我希望能够捕捉如果平移手势是反转。 有没有一个内置的方式,我只是没有看到检测回到一个手势? 我是否需要储存我的原始起点,然后追踪终点,然后看看它们在哪里移动,并确定它是否小于起始终点,然后相应地反转? 我可以看到工作,但我希望有一个更优雅的解决scheme! 谢谢 编辑: 这里是识别器被设置为触发的方法。 它有点黑客,但它的作品: -(void) throttle:(UIGestureRecognizer *) recognize{ throttleCounter ++; if(throttleCounter == 6){ throttleCounter = 0; [self nextPic:nil]; } UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *) recognize; UIView *view = recognize.view; if(panGesture.state == UIGestureRecognizerStateBegan){ CGPoint translation = [panGesture translationInView:view.superview]; NSLog(@"X: %f, Y:%f", translation.x, translation.y); }else if(panGesture.state == UIGestureRecognizerStateEnded){ CGPoint translation […]
我喜欢从UINavigationController中embedded视图inheritance的swipe包。 不幸的是,我似乎无法find一种方法来隐藏导航栏,但仍然有触摸平移轻扫手势。 我可以编写自定义手势,但是我宁愿不要依赖于UINavigationController反滑动手势。 如果我在故事板中取消选中,则后滑动不起作用 或者如果我以编程方式隐藏它,相同的情况。 – (void)viewDidLoad { [super viewDidLoad]; [self.navigationController setNavigationBarHidden:YES animated:NO]; // and animated:YES } 有没有办法隐藏顶部导航栏,仍然有刷卡?
我正在iphone(iOS 4.0或更高版本)的应用程序,并在多个视图之间的触摸处理有一些麻烦。 我有这样的视图结构 —> A superView | —> SubView – A | —> SubView – B (exactly on top of A, completely blocking A). 基本上我有一个superView,并且兄弟姐妹子视图A和B.B具有与A相同的框架,因此完全隐藏A. 现在我的要求是这样的。 子视图B应该接收所有轻扫和轻击(单和双)手势。 子视图A应该收到所有捏手势。 这是我如何添加手势识别器的意见 UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)]; [leftSwipe setDirection:(UISwipeGestureRecognizerDirectionLeft)]; leftSwipe.delegate = self; [bView addGestureRecognizer:leftSwipe]; [leftSwipe release]; UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)]; [rightSwipe setDirection:(UISwipeGestureRecognizerDirectionRight)]; rightSwipe.delegate = self; […]