IOS:拖动多个图像

时间:2011-02-24 15:55:58

标签: iphone cocoa-touch xcode

我尝试在我的iPhone-App中制作多个可拖动的图像。我在YouTube上关注了一个教程,但它不起作用。

我用这种方式创建图像:

image1=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"button_klein.png"]];
[image1 setFrame:CGRectMake(touchPoint.x-25,touchPoint.y-25,50,50)]; 
[[self view] addSubview:image1];

image2=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"button2_klein.png"]];
[image2 setFrame:CGRectMake(135,215,50,50)];
[[self view] addSubview:image2];

然后我尝试以这种方式使它们可拖动:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *myTouch = [[event allTouches] anyObject];
    CGPoint location = [myTouch locationInView:self.view];

    if ([myTouch view] == image1) {
        image1.center = location;
        NSLog(@"Test1");
    }
    if ([myTouch view] == image2) {
        image2.center = location;
        NSLog(@"Test2");
    }
}

但它不起作用。当我试图使一个图像可拖动时,它可以工作。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *myTouch = [[event allTouches] anyObject];
    image1.center = [myTouch locationInView:myTouch.view];
}

有谁能告诉我,问题在哪里?

2 个答案:

答案 0 :(得分:1)

UITouch.view会返回“处理”触摸的视图(或多或少是-hitTest:withEvent:返回的视图。在这种情况下,它是self,而不是image1image2。(您可以通过breakpointing -touchesMoved:withEvent:来检查这一点,并自己检查一下。)

你想要做类似

的事情
if ([image1 pointInside:[myTouch locationInView:image1] withEvent:event]) {
  ...
} else if ([image2 pointInside: ...]) {
  ...
}

请注意,触摸可以在两个视图中;我通过默认选择image1来处理这个问题,但你必须决定什么是“正确的”。

答案 1 :(得分:-3)

image1image2UIImageView,您无法将其与[(UITouch*) view]UIView)进行比较。因此,比较永远不会发生,这意味着不会覆盖两个if条件。

尝试将image1image2放在名为UIViewimage1View的2 image2View内,您的代码将变为if ([myTouch view]==image1View) image1View.center=location,依此类推