2011-02-06 28 views
1

删除的UIImageView在我的应用程序,当用户触摸屏幕时,我把一个UIImageView在屏幕上是这样的:从它的父

- (void) drawPoint:(CGPoint) toLocation { 
    UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(toLocation.x, toLocation.y, SIZE_X, SIZE_Y)]; 
    image.tag = 1; 
    [image setImage:[UIImage imageNamed:@"point.png"]]; 
    [self.myView addSubview:image]; 
    [image release]; 
} 

这里MyViewUIView

当用户完成感人,我想删除我的UIImageView。我曾经尝试这样做:

- (void) removeFromPoint:(CGPoint) location{ 
    UIImageView *image; 
    [[image viewWithTag:1] removeFromSuperview]; 
} 

- (void) removeFromPoint:(CGPoint) location{ 
    UIImageView *image = (UIImageView *)[self.MyView viewWithTag:1]; 
    [image removeFromSuperview]; 
} 

但他们两人在EXC_BAD_ACCESS结束。 你知道我该怎么做到这一点?

谢谢。

+0

告诉我们MyView的财产 – 2011-02-06 17:53:16

+1

的声明是什么调用堆栈看,当你`EXC_BAD_ACCESS`什么样的?你可以在GDB中看到它,它会告诉你谁试图在其销毁后访问一个对象。 – 2011-02-06 17:54:13

+0

在第一个块中接收到一个'EXC_BAD_ACCES`不应该感到惊讶:您正在向`removeFromPoint:`中的未初始化对象发送消息。你的图像变量只包含一些垃圾,你不能发送任何东西!在你的第二部分代码中,我想你可能犯了一个错字:`self.MyView`应该是`self.myView`。 – v1Axvw 2011-02-06 20:00:09

回答

1

如果你想删除的触摸下的uImage试试这个:

UIView * imageView = [self.myView hitTest:location withEvent:nil]; 
if ([imageView isKindOfClass:[UIImageView class]] && imageView.tag == 1) { 
    [imageView removeFromSuperview]; 
} 

(注意我已经在这里键入它,我还没有测试代码)

如果你想调试代码启用NSZombies并检查你为什么得到bad_access。 (检查这个以了解更多有关NSZombieEnabled http://www.cocoadev.com/index.pl?NSZombieEnabled

如果您要添加只有一个视图。然后我会把它保存在保留的财产,我会添加/删除它这样的活动:

@property (nonatomic,retain) UIImageView* marker; 

@interface 
@syntesize marker; 

-(void) onTouchDown { 
    [self.view addSubview:marker]; 
} 

-(void) onTouchUp { 
    [marker removeFromSuperview]; 
} 
1

移除图像视图的第一个例子是错误的。 第二个是什么POINT_TAG等于? 尝试使用标签大于9 尝试调试的UIImageView *image = (UIImageView *)[self.MyView viewWithTag:POINT_TAG]; 回报。