我是一个全新的触摸和拖动,我试图制作八个可拖动的图像。这是我的ViewController.m文件中的样子:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self.view];
//check for which peg is touched
if ([touch view] == darkGreyPeg){darkGreyPeg.center = location;}
else if ([touch view] == brownPeg){brownPeg.center = location;}
//there are six more else ifs
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
[self touchesBegan:touches withEvent:event];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
[self ifCollided];
}
如果我将if语句和locationInView:self.view取出到locationInView:touch.view,我可以毫无问题地拖动darkGreyPeg,并在适当时触发我的[ifCollided]。
我正在观看youTube教程(Milmers Xcode教程,"拖动多个图像"),他有完全相同类型的代码,但我的工作并不起作用。有人能指出我的原因吗?
感谢。
答案 0 :(得分:1)
尝试检查用户互动已启用&在视图图像属性中多次触摸。如果不检查启用的用户交互,则无法使用多次拖动。我试过这个,并成功拖动多个图像,标签或按钮。
答案 1 :(得分:0)
您不应该在ViewController中实现这些方法,而是在希望能够拖动的View类中实现这些方法。
答案 2 :(得分:0)
我认为问题是使用==来比较对象:
[touch view] == darkGreyPeg
你应该使用isEqual:来比较对象:
[[touch view] isEqual:darkGrayPeg]
编辑后:我认为问题是您忘记将userInteractionEnabled
设置为YES以获取图片视图。如果不这样做,touch.view将是superview,而不是图像视图。此外,您可能不需要所有if语句来确定要移动的图像视图,您只需使用touch.view:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self.view];
if (![touch.view isEqual:self.view]) touch.view.center = location;
}
如果您有其他视图,除了您不想移动的self.view之外,您还必须排除它们,或者使用不同的排除条件(例如,如果它是图像视图,则仅移动对象,或者只有具有特定标签值的对象。)