removeFromSuperview不起作用

时间:2014-08-20 20:16:11

标签: xcode ios7 uiimageview

在我的视图中,我添加了imageView,但在删除后,此图像会保留在视图上,如何将其删除?

创建:

(void)handleTapHold:(UILongPressGestureRecognizer *)gestureRecognizer{
UIImageView *pinkIm = [[UIImageView alloc]initWithFrame:CGRectMake(self.roundView.frame.origin.x + 70, self.roundView.frame.origin.y - 70, 60, 60)];
[pinkIm setImage:[UIImage imageNamed:@"pink_print"]];
pinkIm.layer.cornerRadius = pinkIm.frame.size.height / 2;
pinkIm.layer.borderWidth = 3.0f;
pinkIm.layer.borderColor = [UIColor whiteColor].CGColor;
pinkIm.clipsToBounds = YES;

[self.view addSubview:pinkIm];

 if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
  [pinkIm removeFromSuperview];
 }
}

稍后用同样的方法我尝试删除但没有任何事情发生:

 [pinkIm removeFromSuperview];

找到我的问题,一开始我不添加:

if (gestureRecognizer.state == UIGestureRecognizerStateBegan){

2 个答案:

答案 0 :(得分:1)

可能是当你尝试删除它时,* pinkIm已经是零 - 你可以发布剩下的代码,以便我们可以确保指针pinkIm不是nil吗?

如果它是零,并且你无能为力,那么删除它的另一种方法是通过当前视图的孩子找到它。例如:

for(UIView *child in self.children){
if([child isKindOfClass: [UIImageView class]]){
[child removeFromSuperView];
break;}}

注意:如果您有多个图像视图,则上述操作无效。在这种情况下,您可能希望继续检查" child"的状态。确保你在谈论* pinkIm指向的内容。

请发布方法的其余代码!

答案 1 :(得分:0)

请确保您在主线程上触发该方法,请尝试以下操作:

 if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
         [pinkIm removeFromSuperview];
    })
 }