从超级视图中删除在动画完成处理程序中不起作用

时间:2019-06-26 02:31:12

标签: objective-c animatewithduration removefromsuperview

我有一个添加了多个UILabel的UIView。我只是用动画将它们全部移动到屏幕的中央,然后尝试在动画完成处理程序中将它们从其超级视图中删除。

for (label in [self.view subviews])
{
    if([label isKindOfClass:[UILabel class]])
    {
        CGRect frame = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, label.frame.size.width, label.frame.size.height);
        [UIView animateWithDuration:2.0
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             [self->label setFrame:frame];
                         }
                         completion:^(BOOL finished){
                             dispatch_async(dispatch_get_main_queue(),^{
                                 [self->label removeFromSuperview];
                             });
                         }
         ];
    }
}

我遇到的问题是,在动画结束时仍保留UILabels。如果我将removeFromSuperView调用放在动画块的外面,那么它可以工作,但是当然,在动画有机会完成之前,它们将被删除。

1 个答案:

答案 0 :(得分:1)

在for-in中有$sql="SELECT * FROM image"; $res=$conn->query($sql); if($res->num_rows >0){ while($row=$res->fetch_assoc()){ $filenam= $row['name']; $binaryData= explode(',',$row['binary_image']); $extens= $row['extension']; //echo '<img src="data:image/jpeg;base64,'.$binaryData[1].'" alt="photo"> <br>'; ?> <img src="<?=$binaryData[0].','. $binaryData[1] ?>" /> <?php } } 作为变量,在块中有label。显然,您并没有在您原来认为的标签上进行操作。