我正在尝试添加一个UITapGesture
UIButton,以便在点击时触发一个函数.我正在使用Swift 3
并且收到一些错误:
由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [SwiftRunner.ViewController tapBlurButton]:无法识别的选择器发送到实例0x149e07610'
这大致是我所拥有的:
// Swift 3
import UIKit
class ViewController {
@IBOutlet weak var qsBlurButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tapBlurButton")))
qsBlurButton.addGestureRecognizer(tapGesture)
}
func tapBlurButton(sender: UITapGestureRecognizer) {
print("Please Help!")
}
}
Run Code Online (Sandbox Code Playgroud) 我的 iOS Swift 5 (Xcode 14.1) 应用程序正在运行。上次 Xcode 更新后,我注意到当我在导航控制器内的堆栈中推送带有表视图的特定视图控制器时,我收到以下警告:
[SystemGestureGate] <0x102210320> 手势:系统手势门超时
当我向后滑动以弹出有问题的视图控制器时,它的行为不稳定,有时弹出得很好。我所说的“不稳定”是指有时它会部分显示目标视图控制器,有时会在滑动中间冻结一两秒等。当我尝试再次推入有问题的视图控制器时(出现警告后),它会冻结应用程序。
视图控制器、堆栈、表格和单元格没有自定义手势识别器。
我在应用程序的其他地方没有看到这个警告(包括带有堆栈和表格的视图控制器)。
我的问题是:
我怀疑我正在使用的表有问题,正在进一步调查。
我采取的一些故障排除步骤:
viewWillAppear
,但之前viewDidAppear
。我期望视图控制器将以与导航控制器中所有其他视图控制器相同的方式滑动来弹出。
我在这样的方法中附加一个UISwipeGestureRecognizer
a :UITableViewCell
cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
gesture.direction = UISwipeGestureRecognizerDirectionRight;
[cell.contentView addGestureRecognizer:gesture];
[gesture release];
}
return cell;
}
Run Code Online (Sandbox Code Playgroud)
但是,该didSwipe
方法在成功滑动时始终被调用两次.我最初认为这是因为手势开始和结束,但如果我注销gestureRecognizer本身,它们都处于"结束"状态:
-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"did swipe called %@", gestureRecognizer);
}
Run Code Online (Sandbox Code Playgroud)
安慰:
2011-01-05 12:57:43.478 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView …
Run Code Online (Sandbox Code Playgroud) 我正在移动我的观点
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveRight:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[bubbleView[rightCnt] addGestureRecognizer:panRecognizer];
[panRecognizer release];
Run Code Online (Sandbox Code Playgroud)
现在,我希望通过长按拖动来做同样的事情.
任何的想法?
我对编程和目标C都很陌生.我想知道如何制作一个有空白屏幕和计时器一分钟的应用程序.你的意思是尽可能快地点击,只要你可以.我想知道如何实现UITapGestureRecognizer
我的代码.
user-interface objective-c uigesturerecognizer ios uitapgesturerecognizer
我有一个不同的UIStoryboard UIViewControllers
,我想添加另一个UIViewController
(如仪表板),当用户从左侧滑动ipad时,仪表板会出现,然后当他向后滑动时,当前视图将被恢复.
这可能吗?如果是的话有什么提示怎么做或任何好的教程UIGestureRecognizer
?
谢谢.
objective-c uiviewcontroller uigesturerecognizer ios swipe-gesture
我试图让UIGestureRecognizer使用UIWebview,它是UIScrollView的子视图.这听起来很奇怪但是当我将numberOfTouchesRequired
设置设置为2时,选择器会触发,但是当numberOfTouchesRequired
设置为1时,选择器不会触发.
这是我的代码:
UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(select1:)];
tap1.numberOfTouchesRequired = 2;
tap1.numberOfTapsRequired = 1;
tap1.delegate = self;
[self.ans1WebView addGestureRecognizer:tap1];
[tap1 release];
- (void) select1:(UILongPressGestureRecognizer *)sender {
//Do Stuff
}
Run Code Online (Sandbox Code Playgroud)
我已经通过使用Apple样本用于UIGestureRecognizer并在其笔尖中插入webview来证实了这一点.他们的tap代码可以在webview区域内的任何地方使用.
我有一个垂直滚动UIScrollView
.我还想在其上处理水平平移,同时允许默认的垂直滚动行为.我UIView
在滚动视图上放置了一个透明图,并为其添加了一个平移手势识别器.这样我可以很好地获得平底锅,但滚动视图不会接收任何手势.
我已经实现了以下UIPanGestureRecognizerDelegate
方法,希望仅将我的手势识别器限制为水平平底锅,但这没有帮助:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
// Only accept horizontal pans here.
// Leave the vertical pans for scrolling the content.
CGPoint translation = [gestureRecognizer translationInView:self.view];
BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y));
return isHorizontalPan;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return (otherGestureRecognizer == _scrollView.panGestureRecognizer);
}
Run Code Online (Sandbox Code Playgroud) uiscrollview uigesturerecognizer ios ios5 uipangesturerecognizer
问题
在我的iPad应用程序中,仅在按下并保持事件后才能将弹出窗口附加到按钮栏项目.但这似乎是撤消/重做的标准.其他应用程序如何做到这一点?
背景
我的UIKit(iPad)应用程序的工具栏中有一个撤消按钮(UIBarButtonSystemItemUndo).当我按下撤销按钮时,它会触发它的动作,即undo:,并且正确执行.
然而,在iPad上撤消/重做的"标准UE惯例"是按下撤销执行撤消,但按住按钮会显示一个弹出控制器,用户选择"撤消"或"重做"直到控制器被解除.
附加弹出控制器的常规方法是使用presentPopoverFromBarButtonItem:,我可以很容易地配置它.要仅在按住之后显示此内容,我们必须设置视图以响应"长按"手势事件,如此代码段中所示:
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];
Run Code Online (Sandbox Code Playgroud)
有了这个,在按下并保持视图后,方法handleLongPressOnUndoGesture:将被调用,在这个方法中,我将配置并显示undo/redo的popover.到现在为止还挺好.
这个问题是没有附加视图.self.undoButtonItem是一个UIButtonBarItem,而不是一个视图.
可能的解决方案
1)[理想] 将手势识别器附加到按钮栏项目.可以将手势识别器附加到视图,但UIButtonBarItem不是视图.它确实具有.customView的属性,但当buttonbaritem是标准系统类型时(在这种情况下它是),该属性为nil.
2)使用另一个视图.我可以使用UIToolbar,但这需要一些奇怪的命中测试,并且如果可能的话首先是一个全面的黑客攻击.我无法想到使用其他替代视图.
3)使用customView属性.像UIBarButtonSystemItemUndo这样的标准类型没有customView(它是nil).设置customView将删除它需要的标准内容.这将相当于重新实现UIBarButtonSystemItemUndo的所有外观和功能,如果可能的话.
题
如何将手势识别器附加到此"按钮"?更具体地说,如何在iPad应用程序中实现标准的按住 - 显示 - 重做 - 弹出窗口?
想法?非常感谢,特别是如果有人真的在他们的应用程序中工作(我在想你,omni)并想分享......
cocoa-touch undo-redo uibarbuttonitem ipad uigesturerecognizer
在iOS 13中,可以使用平移手势关闭使用表单和页面样式的模式演示。在我的一个表单中,这是有问题的,因为用户会拖入该框,从而干扰手势。它将屏幕下拉而不是画一条垂直线。
如何在显示为图纸的模态视图控制器中禁用垂直滑动以消除手势?
设置isModalInPresentation = true
仍然允许将工作表拉下,但不会关闭。
ios ×8
objective-c ×4
ipad ×3
iphone ×3
swift ×2
cocoa ×1
cocoa-touch ×1
ios13 ×1
ios5 ×1
swift3 ×1
uiscrollview ×1
uitableview ×1
undo-redo ×1