我的应用程序有一个表格视图(当然还有滚动),这个视图使用手势识别器(就像在Facebook应用程序上一样)打开和关闭.
如果我使用按钮将[表格视图滑动到屏幕],它可以正常工作,但是当我使用手势识别器时,表格视图不能再滚动.
以下是具有问题的手势识别器代码:
[self.view addGestureRecognizer:self.slidingViewController.panGesture];
Run Code Online (Sandbox Code Playgroud)
有人有想法吗?
我的手势有些麻烦.
我试图在同一个按钮上同时使用水龙头和长按,所以我已经习惯了
@IBAction func xxx (sender: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
和
@IBAction func xxx (sender: UILongPressGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
但是当我点击时,我的按钮似乎对这两个功能做出了反应.可能有什么问题?
func long(longpress: UIGestureRecognizer){
if(longpress.state == UIGestureRecognizerState.Ended){
homeScoreBool = !homeScoreBool
}else if(longpress.state == UIGestureRecognizerState.Began){
print("began")
}
}
Run Code Online (Sandbox Code Playgroud) 我看到我可以删除所有UIPageViewController手势,但是如果我只想删除边缘上的点按手势呢?并保持滑动手势?这可能吗?
谢谢
我已经分类了UITableViewCell,在那个课程中我应用了一个Pan手势识别器:
UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)];
panning.minimumNumberOfTouches = 1;
panning.maximumNumberOfTouches = 1;
[self.contentView addGestureRecognizer:panning];
[panning release];
Run Code Online (Sandbox Code Playgroud)
然后,我实现了委托协议,该协议应该允许在表的视图中同时进行手势:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
然后我在handlePanning方法中放置一个日志,看看它何时被检测到:
- (void)handlePanning:(UIPanGestureRecognizer *)sender {
NSLog(@"PAN");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法垂直滚动查看tableview中的单元格列表,handlePanning无论我在哪个方向上调用它都会被调用.
我想要的handlePanning只是在只有水平平移而不是垂直时调用.会很感激一些指导.
当我UIView使用transform属性(CGAffineTransformMakeRotation)旋转我时,我需要拖动它的一个角,比如说右下角,以调整它的大小.在此过程中,当用户拖动角落时,视图的角落必须跟随用户的手指,并通过增加2个边(右下角拖动的右下角)来调整框的大小.
UIView当不转换框时,可以使用框架和触摸位置来调整大小并不困难.例如,我会记住UIPanGestureRecognizer handler在StateBegan上附加到此可调整大小视图的初始帧和触摸,并且在StateChanged上,我将计算触摸点X,Y与初始触摸的差异,并将这些值添加到初始帧宽度和高度.
但是,UIView当应用变换时,帧对于旋转是可靠的.因此,我只能依靠bounds和center.我创建了这个代码,但它几乎可以工作:我只能在所有4个方向上按比例放大视图,而不是一个.
- (void)handleResizeGesture:(UIPanGestureRecognizer *)recognizer {
CGPoint touchLocation = [recognizer locationInView:self.superview];
CGPoint center = self.center;
switch (recognizer.state) {
case UIGestureRecognizerStateBegan: {
deltaAngle = atan2f(touchLocation.y - center.y, touchLocation.x - center.x) - CGAffineTransformGetAngle(self.transform);
initialBounds = self.bounds;
initialDistance = CGPointGetDistance(center, touchLocation);
initialLocation = touchLocation;
if ([self.delegate respondsToSelector:@selector(stickerViewDidBeginRotating:)]) {
[self.delegate stickerViewDidBeginRotating:self];
}
break;
}
case UIGestureRecognizerStateChanged: {
CGFloat scale = CGPointGetDistance(center, touchLocation)/initialDistance;
CGFloat minimumScale = …Run Code Online (Sandbox Code Playgroud) 我有一个表有一个长按手势识别器,根据选择的表行运行代码.
我遇到的麻烦是,我现在必须点击我想要的行,然后长按.
如何让表格选择我长按的行而不必先点击选择它?
我喜欢将UILongPressGestureRecognizer与UIPanGestureRecognizer结合使用.
UIPanGestureRecognizer应该从长按开始.有一个简单的方法吗?还是我真的要写自己的手势识别器?
我不喜欢在主屏幕上.你按下一个图标,一段时间后图标开始摇晃.之后我没有从屏幕上松开手指,我可以开始拖动手指下的图标.
cocoa-touch objective-c uigesturerecognizer uipangesturerecognizer uilongpressgesturerecogni
我该如何取消或重置UIGestureRecognizer?问题是,如果我设置waitForSomething到NO手势时,下一个事件是UIGestureRecognizerStateChanged.但第一件事应该是UIGestureRecognizerStateBegan.
我的代码:
- (void) panned:(UIPanGestureRecognizer *) recognizer {
if (waitForSomething) {
// cancel or reset the recognizer!
// because the next event should be UIGestureRecognizerStateBegan and not UIGestureRecognizerStateChanged
return;
}
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
// important initialisation code
break;
case UIGestureRecognizerStateChanged:
// do something
break;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
好的,我有点困惑.
我有一个UIScrollView的子类,这是我尝试像UI元素一样水平滚动"表视图".UIScrollView本身设置它在内部使用的UIGestureRecognizers,它似乎将自己设置为那些UIGestureRecognizers的委托.我在我的水平表元素/单元格上也有自己的UIGestureRecognizer设置,我自己的类设置为我自己的UIGestureRecognizer的委托.由于我的类是UIScrollView的子类,在运行时,UIGcureRecognizer委托调用来到我的类,用于UIScrollView内置的UIGestureRecognizers和我自己的UIGestureRecognizers.有点像PITA,但我们可以通过传递我们不关心的东西来解决这个问题.
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
return NO;
else
{
if ([super respondsToSelector:@selector(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)])
return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
else
return NO;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是检查[super respondsToSelector:@selector()]返回YES,但是当我实际调用它时,return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];我得到以下异常
2012-08-31 12:02:06.156 MyApp [35875:707] - [MyAppHorizontalImageScroller gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]:无法识别的选择器发送到实例0x21dd50
我本以为应该表明
- [UIScrollView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]
但那可能没问题.但问题是,它说它响应然后不响应.
另外两个UIGestureRecognizer委托例程使用此代码(显然是不同的选择器).
感谢您的任何见解.
delegates objective-c super uigesturerecognizer respondstoselector
添加单击手势UICollectionView,不要妨碍单元格选择.
我想在collectionView的无单元格部分进行一些其他的点击.
使用XCode8,Swift 3.
override func viewDidLoad() {
...
collectionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath)
}
func tap(sender: UITapGestureRecognizer){
print("tapped")
}
Run Code Online (Sandbox Code Playgroud)
是的,它现在阻碍了它.当您点击单元格时,它会记录"轻拍".
找不到更多的痕迹.有关如何实施细胞选择或实现此任务的任何想法?
ios ×7
objective-c ×4
iphone ×3
swift ×3
cocoa-touch ×2
delegates ×1
ipad ×1
super ×1
uiresponder ×1
uitableview ×1