如何删除在UIViewController上某个特定点绘制的UIImageView?

时间:2012-08-23 12:21:42

标签: objective-c ios uiviewcontroller uiimageview uikit

每当我想在我的View Controller窗口的某个特定x-y坐标上绘制图像(在本例中为“goodCell.png”)时,我会调用以下方法,包括相应的参数:

-(void)paintGoodCellatX:(int)xAxis andY:(int)yAxis onViewController:(UIViewController*)playingViewController
{
    int x = 32*(xAxis - 1);
    int y = 384 - (32* yAxis);

    UIImage* myImage = [UIImage imageNamed:@"goodCell.png"];
    UIImageView* myImageView = [[UIImageView alloc] initWithImage:myImage];
    myImageView.frame = CGRectMake(x,y, 32, 32);
    [playingViewController.view addSubview:myImageView];

}

如果在我的代码中的某个稍后时间点我想要删除上面的一个图像,则会在某个特定的x& y坐标,我该怎么做?

鉴于此代码,我无法抓住我绘制的ImageView(因此我不能使用[myImageView removeFromSuperView];之类的东西,因为名称myImageView没有定义任何东西),除了它的坐标。那么有没有办法在View Controller窗口的特定x-y坐标上删除/删除UIImageView或其他一些方法来解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:2)

在您的视图中添加TAG,为您提供有意义的标识符。使用myImageView.tag = XXX;

然后使用[playingViewController viewWithTag:XXX]获取要删除的视图的UIImageView句柄。

标签是一个整数,它可以是存储这些X / Y位置的NSArray的偏移量,还是存储这些值的NSDictionary中的一个键?

答案 1 :(得分:1)

你可以给每个视图一个由点计算的标签,例如3个数字x比3个数字y轴作为标签

对于x = 312 y = 567,它将是

myImageView.tag = 312567;

这样你就可以随时识别视图

另一种更好的可能性是将所有添加的内容存储在NSArray中。 如果要删除一个特定视图,则必须遍历数组并检查该点是否在视图的边界内 所以或多或少:

用于创作;

NSMutableArray *imageViewArray = [[NSMutableArray alloc] init];
-(void)paintGoodCellatX:(int)xAxis andY:(int)yAxis onViewController:(UIViewController*)playingViewController
{
    int x = 32*(xAxis - 1);
    int y = 384 - (32* yAxis);

    UIImage* myImage = [UIImage imageNamed:@"goodCell.png"];
    UIImageView* myImageView = [[UIImageView alloc] initWithImage:myImage];
    myImageView.frame = CGRectMake(x,y, 32, 32);
    [playingViewController.view addSubview:myImageView];
    [imageViewArray add:myImageView];
}

删除:

for(UIImageView *mv in imageViewArray) {
 if(CGRectContainsPoint(mv.bounds, yourCGPoint)) 
  [mv removeFromSuperview];
}