Ios 如何在绘制前清除子视图的内容

Ios 如何在绘制前清除子视图的内容,ios,ipad,uiview,uibutton,Ios,Ipad,Uiview,Uibutton,我使用两个块在子视图上动态绘制一些按钮。一个计算纵向模式的帧,另一个计算横向模式的帧。它工作得很好,但当我旋转时,它会覆盖旧的。因此,我的一些按钮出现了两次。以下是我检测原点的代码: //i have defined blocks in viewDidLoad: and everything is ok till here - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOri

我使用两个块在子视图上动态绘制一些按钮。一个计算纵向模式的帧,另一个计算横向模式的帧。它工作得很好,但当我旋转时,它会覆盖旧的。因此,我的一些按钮出现了两次。以下是我检测原点的代码:

//i have defined blocks in viewDidLoad: and everything is ok till here
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
        {
            dispatch_async(dispatch_get_main_queue(), PortraitBlock);        
        }       
        else 
        { 
            dispatch_async(dispatch_get_main_queue(), LandscapeBlock);
               }
        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || 
                interfaceOrientation == UIInterfaceOrientationPortrait || 
                interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
                interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
    }
现在,如何清理添加按钮的视图


注意:我在UIView对象上添加了按钮,而该对象也在UIScrollView对象上

根本不添加新按钮。换个旧的镜框就行了

如果需要添加新按钮。把旧的拿走!?要删除所有子视图,可以使用:

for(UIView* view in self.view.subviews)
{
    [view removeFromSuperview];
}

根本不要添加新按钮。换个旧的镜框就行了

如果需要添加新按钮。把旧的拿走!?要删除所有子视图,可以使用:

for(UIView* view in self.view.subviews)
{
    [view removeFromSuperview];
}

用下面的代码试试你在视图中分配的所有按钮 将被删除

用下面的代码试试你在视图中分配的所有按钮 将被删除


在从视图中删除视图之前,首先检查类,然后将其删除。之后,您可以根据方向在屏幕上添加按钮

for(UIView *view in [View to add buttons].subviews)
{
   if ([view isKindOfClass:[UIButton class]]) [view removeFromSuperview];
}

如果您正在使用任何
customButton
,请在从视图中删除视图之前,先检查类,然后将其删除,然后将其替换为
UIButton
。之后,您可以根据方向在屏幕上添加按钮

for(UIView *view in [View to add buttons].subviews)
{
   if ([view isKindOfClass:[UIButton class]]) [view removeFromSuperview];
}


如果您正在使用任何
customButton
来代替
UIButton
customButtonClassName
任何UI更改都必须在主线程上完成,为什么要异步调用这些块?什么是撞车!?有日志吗?我在我的代码块中尝试了你的代码,但是出现了一个空屏幕。没有崩溃,但没有结果,因为任何UI更改都必须在主线程上执行,为什么要异步调用这些块?什么是撞车!?有日志吗?我在我的代码块中尝试了你的代码,但是出现了一个空屏幕。没有崩溃,但没有结果too@illis如果按钮添加了两次,则给按钮添加标签,并检查按钮是否存在,然后dnt添加。您无需每次旋转设备时重新绘制按钮。只要把它们移到适当的地方,如果需要的话,可以改变外观。我需要更多关于您的特殊情况的信息,以便能够提供帮助。@SVGreg谢谢,我solved@illis如果按钮添加了两次,则给按钮添加标签,并检查按钮是否存在,然后dnt添加。您无需每次旋转设备时重新绘制按钮。只需将它们移动到适当的位置,并根据需要更改外观。我需要有关您特定情况的更多信息,以便能够提供帮助。@SVGreg谢谢,我确实在块中尝试了此方法,后来又尝试了旋转方法。但它删除了所有的滚动视图。出现一个空白屏幕这将从视图中删除所有子视图。用一些标记值标记按钮的视图,以找到它们。我在块中尝试了此方法,后来又尝试了旋转方法。但它删除了所有的滚动视图。出现一个空白屏幕这将从视图中删除所有子视图。用一些标记值标记按钮的视图,以找到它们。