我尝试在我的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];
}
有谁能告诉我,问题在哪里?
答案 0 :(得分:1)
UITouch.view
会返回“处理”触摸的视图(或多或少是-hitTest:withEvent:
返回的视图。在这种情况下,它是self
,而不是image1
或image2
。(您可以通过breakpointing -touchesMoved:withEvent:来检查这一点,并自己检查一下。)
你想要做类似
的事情if ([image1 pointInside:[myTouch locationInView:image1] withEvent:event]) {
...
} else if ([image2 pointInside: ...]) {
...
}
请注意,触摸可以在两个视图中;我通过默认选择image1来处理这个问题,但你必须决定什么是“正确的”。
答案 1 :(得分:-3)
image1
和image2
为UIImageView
,您无法将其与[(UITouch*) view]
(UIView
)进行比较。因此,比较永远不会发生,这意味着不会覆盖两个if
条件。
尝试将image1
和image2
放在名为UIView
和image1View
的2 image2View
内,您的代码将变为if ([myTouch view]==image1View) image1View.center=location
,依此类推