und*_*ted 5 cocoa-touch uikit uigesturerecognizer ios
我试图找出当我使用locationOfTouch时出现错误的原因:inView.最后我用locationOfTouch调用创建了一个新视图,每当我触摸视图时我仍然会得到一个SIGABRT.
除了import语句之外,这里是我视图中的所有代码:
@interface Dummy : UIView <UIGestureRecognizerDelegate> {
UIPanGestureRecognizer *repositionRecognizer;
}
@end
Run Code Online (Sandbox Code Playgroud)
这是impl:
@implementation Dummy
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
repositionRecognizer = [[UIPanGestureRecognizer alloc]
initWithTarget:self
action:@selector(reposition:)];
[repositionRecognizer setDelegate:self];
[self addGestureRecognizer:repositionRecognizer];
self.backgroundColor = [UIColor grayColor];
}
return self;
}
- (void)reposition:(UIGestureRecognizer *) gestureRecognizer {
[gestureRecognizer locationOfTouch:0 inView:self];
//[gestureRecognizer locationInView:self];
}
@end
Run Code Online (Sandbox Code Playgroud)
如果我使用locationInView,它可以正常工作.如果我使用locationOfTouch:inView,程序会在触摸结束后立即中止.
编辑:在控制台上,使用此类,不会显示任何错误消息.IDE使用SIGABRT指向main.m. 点击"继续"会显示"EXC_BAD_INSTRUCTION".http://imageshack.us/photo/my-images/849/consolel.png/上的截图
这会崩溃,因为它假定存在触摸零.你需要先确认有一个,如下:
- (void)reposition:(UIGestureRecognizer *) gestureRecognizer {
if (gestureRecognizer.numberOfTouches > 0){
CGPoint point = [gestureRecognizer locationOfTouch:0 inView:self];
NSLog(@"%@",NSStringFromCGPoint(point));
}
}
Run Code Online (Sandbox Code Playgroud)
想想" locationOfTouch:"部分是说" touchAtIndex:",如果触摸数组是空的(当你抬起手指或将其移出屏幕时),则没有touchAtIndex:0.
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |