从Superview中删除UIImageView

时间:2011-02-06 17:24:02

标签: iphone xcode 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结尾。 你知道我怎么能做到这一点?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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];
}