在iOS中拖动多个图像

时间:2013-12-15 21:14:25

标签: objective-c cocoa-touch uiimageview touchesbegan touchesmoved

我是一个全新的触摸和拖动,我试图制作八个可拖动的图像。这是我的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教程,"拖动多个图像"),他有完全相同类型的代码,但我的工作并不起作用。有人能指出我的原因吗?

感谢。

3 个答案:

答案 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之外,您还必须排除它们,或者使用不同的排除条件(例如,如果它是图像视图,则仅移动对象,或者只有具有特定标签值的对象。)