0

每次我想在视图控制器窗口上的某个特定 xy 坐标处绘制图像(在本例中为“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 窗口上的特定 xy 坐标处删除/删除 UIImageView 或其他解决此问题的方法?

谢谢

4

2 回答 2

2

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

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

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

于 2012-08-23T12:26:58.457 回答
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];
}
于 2012-08-23T12:30:42.990 回答