我试图检测我的精灵节点是否被触摸,我不知道从哪里开始.
let Pineapple = SKSpriteNode(imageNamed: "Pineappleimg")
Pineapple.userInteractionEnabled = true
Pineapple.position = CGPoint(x: CGRectGetMidX(self.frame) - 200, y: CGRectGetMidY(self.frame));
self.addChild(Pineapple)
Run Code Online (Sandbox Code Playgroud) 我将浏览iPhone WWDC 2010 - 104 PhotoScroller App的示例代码.它与我的项目相关图像(PDF页面图像)工作得很好
但我正在努力检测PhotoScroller应用程序中的触摸.使用多次触摸的缩放由ScrollVoiew处理.现在我想要双击放大/缩小照片.在TilingView类中调用Touchesbegan方法.然后我使用[super touchesbegan:withevent:],现在触摸在ImageScrollView类中.
如何在PhotoViewController中获取这些触摸事件.如何实现放大和缩小触摸?
任何人都可以帮助这个Regard?
我需要拖动我的UIView对象.我使用此代码,但它不起作用
float oldX, oldY;
BOOL dragging;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
if ([[touch.view class] isSubclassOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)touch.view;
if (CGRectContainsPoint(label.frame, touchLocation)) {
dragging = YES;
oldX = touchLocation.x;
oldY = touchLocation.y;
}
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
dragging = NO;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
if ([[touch.view class] …Run Code Online (Sandbox Code Playgroud) 如何touchesBegan: withEvent:在UITableViewController类中使用方法?
UITableViewController是UIViewController类的子类.那么为什么该方法在UITableViewController中不起作用?
在我的一个视图控制器中,我有几个包含UITapGestureRecognizer的视图,以及一个实现touchesBegan.我需要优先使用水龙头,touchesBegan所以我将delaysTouchesBegan手势识别器的属性设置为YES.这是正常的,但有一个问题:手势识别器延迟touchesBegan太久.根据文件:
当属性的值为YES时,窗口会暂停UITouchPhaseBegan阶段中触摸对象到视图的传递.如果手势识别器随后识别其手势,则丢弃这些触摸对象.但是,如果手势识别器无法识别其手势,则窗口会以touchesBegan:withEvent:消息(以及可能的后续touchesMoved:withEvent:消息将这些对象传递给视图,以通知其触摸的当前位置) .
问题基本上是当手势识别器不识别手势并将这些对象传递给该手势时touchesBegan,该操作花费的时间太长.无论如何加速它,还是只是处理手势以确定它是否是一个强大的并且不可能缩短?
编辑:
这里有更多信息.这是我用来设置手势识别器的代码:
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
tapRecognizer.delaysTouchesBegan = YES;
tapRecognizer.delegate = self;
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.someView addGestureRecognizer:tapRecognizer];
Run Code Online (Sandbox Code Playgroud) 我知道这是一个非常常见的问题,但每个网站上的所有答案都不起作用!如果您仍然不知道我的意思,那么这行代码可能会帮助您理解.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self.view];
if (touch.view == nextbutton)
[self performSelector:@selector(next)];
if (touch.view == prevbutton)
[self performSelector:@selector(previous)];
if (touch.view == moreoptionsbutton)
[self performSelector:@selector(moresettings)];
}
Run Code Online (Sandbox Code Playgroud)
当你触摸nextbutton, prevbutton, and more optionsbutton它时它什么都不做,UIImageViews顺便说一下.我也尝试使用isEqual:而不是==,但这也没有成功.有什么建议?
我试图弄清楚如何根据用户触摸的位置在地图上添加注释.
我已经尝试过对它进行子类化MKMapView并寻找touchesBegan着火,但事实证明,MKMapView它并没有使用标准的触摸方法.
我也尝试过子类化UIView,添加MKMapView一个孩子,然后听HitTest和touchesBegan.这有点工作.如果我有我的地图的全尺寸UIView,那么就有这样的东西
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return map;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,我touchesBegan将能够得到点
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches){
CGPoint pt = [touch locationInView:map];
CLLocationCoordinate2D coord= [map convertPoint:pt toCoordinateFromView:map];
NSLog([NSString stringWithFormat:@"x=%f y=%f - lat=%f long = %f",pt.x,pt.y,coord.latitude,coord.longitude]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是地图有一些疯狂的行为,就像它不会滚动一样,除非双击,否则它不会放大,但你可以缩小.它只有在我将地图作为视图返回时才有效.如果我没有命中测试方法,地图工作正常,但显然没有得到任何数据.
我是否打算让坐标错误?请告诉我有更好的方法.我知道如何添加注释就好了,我找不到任何在用户触摸地图时添加注释的示例.
我正在使用这两种触摸跟踪方法打印得到的点列表.
手势识别器更易于使用,但如果您使用touchesBegan程序比较得到的点,识别器会避免某些点,特别是在运动开始时.
有谁知道这两个程序之间的准确性是否存在差异?
谢谢!
我有2个滚动视图,两个都应该垂直滚动.外部滚动视图(红色)包含搜索栏和内部滚动视图(蓝色).内部滚动视图应该无限滚动(它包含图像/项目,并具有无限滚动实现).
我希望这个控制器工作的方式如下:
向下滚动时,外部滚动视图应首先滚动,搜索栏应消失(滚出内容区域).只有在那之后,内部滚动视图才应该开始滚动.向上滚动时,内部滚动视图应一直滚动到顶部.只有这样外部滚动视图才能进行滚动事件,最后向上滚动以使搜索栏再次可见.
如果我只是在没有任何修改的情况下将它们嵌套在IB中,那么内部滚动视图会捕获所有滚动事件,而它会以相反的方式工作.
请记住,我在这里使用内部滚动视图作为简化的比喻.在我的应用程序中,我实际上有一个控件,它有一个带嵌套表视图的滚动视图(滚动视图让我水平页面,表视图让我垂直滚动).

我是iOS新手,我UIPanGestureRecognizer在我的项目中使用.在我有一个要求得到当前触摸点和之前的触摸点,当我拖着视图.我正在努力争取这两点.
如果我使用touchesBegan方法而不是使用UIPanGestureRecognizer,我可以通过以下代码得到这两点:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[touches anyObject] locationInView:self];
CGPoint previous=[[touches anyObject]previousLocationInView:self];
}
Run Code Online (Sandbox Code Playgroud)
我需要在UIPanGestureRecognizer事件火灾方法中得到这两点.我怎样才能做到这一点?请指导我.
touchesbegan ×10
ios ×6
iphone ×6
objective-c ×3
uitouch ×3
uiscrollview ×2
hittest ×1
ipad ×1
mkmapview ×1
nested ×1
skspritenode ×1
sprite-kit ×1
swift ×1
touch ×1
uiimageview ×1
uitableview ×1
uiview ×1
wwdc ×1
xcode ×1