我有一个带有alpha 0.5的自定义UIView。我希望在出现另一个相同类型的视图时删除第一个视图,那么我该怎么做呢?
到目前为止,我已经写了这个,我一直记录“不可见”:
MyCustomView *myTranslation = [[MyCustomView alloc]initWithFrame:CGRectMake(0, 330, 320, 150)];
if (myTranslation.tag == 2)
{
NSLog (@"is shown yes");
[[myTranslation viewWithTag:2] removeFromSuperview];
}
else
{
NSLog(@"not visible");
myTranslation.tag = 2;
}
myTranslation.backgroundColor = [UIColor brownColor];
myTranslation.alpha = 0.5;
myTranslation.opaque = 0.5;
[self.view addSubview:myTranslation];
[myTranslation show];
[myTranslation release];
答案 0 :(得分:3)
您无法获得预期,因为您无论如何都要实例化新视图。根本不会标记新视图(标记属性将设置为零),因此您可以获得该结果。
您真正想要做的是尝试使用viewWithTag
从现有的viewController视图中获取视图实例,如下所示。然后你检查你是否真的有一个匹配的视图。只有当您没有获得有效视图(myTranslation
等于nil
)时,您才应该实例化一个新视图并对其进行适当标记。
MyCustomView *myTranslation = (MyCustomView *)[self.view viewWithTag:2];
if (myTranslation != nil)
{
NSLog (@"is shown yes");
[myTranslation removeFromSuperview];
}
else
{
myTranslation = [[MyCustomView alloc] initWithFrame:CGRectMake(0, 330, 320, 150)];
NSLog(@"not visible");
myTranslation.tag = 2;
}
...