在我的应用程序中,当用户触摸屏幕时,我在屏幕上放置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];
}
此处MyView
是UIView
。
当用户完成触摸后,我想删除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 :(得分: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];
}