我在UIView中有两个可拖动的UIImageViews。当我将一个UIImageView拖到另一个上时,我想禁用那两个UIImageViews的触摸事件,并创建另一个响应我的触摸事件的UIImageView。我尝试过使用setUserInteractionEnabled:但它根本不做任何事情。请原谅我,如果这不是一个脑子,但我是编程新手,这是我到目前为止所做的。请给我一些关于我的代码的反馈,并给我一些建设性的批评,因为我觉得好像我说错了。
-(void)swapImageViews
{
if ((self.imgView1.center.x == self.imgView2.center.x) &&
(self.imgView1.center.y == self.imgView2.center.y)) {
[self addSubview:self.imgView3];
self.imgView3.center = CGPointMake(self.imgView1.center.x, self.imgView1.center.y);
[self.imgView1 removeFromSuperView];
[self.imgView2 removeFromSuperView];
[self.imgView1 setUserInteractionEnabled:NO];
[self.imgView2 setUserInteractionEnabled:NO];
}
}
所以再一次,我们的目标是用一个新的图像视图换掉两个图像视图,我也可以拖动它。
我遇到的问题是我的触摸事件仍在前三个图像视图后面移动。
答案 0 :(得分:0)
你说第三张图片出现了,但其他两张图片仍然在视图中,他们仍然会收到触摸事件。有两种情况:
self.imgView1
和self.imgView2
未设置为视图堆栈中的实际对象。他们可能只是零。您可以在该方法中NSLog(@"%@ %@", self.imgView1, self.imgView2);
之前,条件之前或viewWillAppear
或viewDidLoad
进行调试。支持我观点的原因:
removeFromSuperview
调用到要禁用的两个图像视图,但它们仍然可见并接收触摸事件。这意味着不执行此方法。这意味着它们是nil
或其他一些与可见对象不同的对象。答案 1 :(得分:0)
这不是最好的方法,但是使用您提供给我们的代码,我们没有很多选项,您可以做类似的事情,删除手势:
-(void)swapImageViews{
if ((self.imgView1.center.x == self.imgView2.center.x) &&
(self.imgView1.center.y == self.imgView2.center.y)) {
[self addSubview:self.imgView3];
self.imgView3.center = CGPointMake(self.imgView1.center.x, self.imgView1.center.y);
[self.imgView1 removeFromSuperView];
[self.imgView2 removeFromSuperView];
NSArray* gestures1 = [self.imgView1.gestureRecognizers copy];
for(UIGestureRecognizer *gesture in gestures1){
[self.imgView1 removeGestureRecognizer:gesture];
}
NSArray* gestures2 = [self.imgView2.gestureRecognizers copy];
for(UIGestureRecognizer *gesture in gestures2){
[self.imgView2 removeGestureRecognizer:gesture];
}
}
}