【问题标题】:iOS: Why Change subview Frame when I Scrolled?iOS:为什么滚动时更改子视图框架?
【发布时间】:2016-01-12 06:12:09
【问题描述】:

如何在 UIScrollView 中修复屏幕上的子视图位置? 每次滚动时都会删除子视图。

我用这个但是闪烁子视图。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{  
    UIButton *btn = (UIButton*)[self.view viewWithTag:popupTag];   
    BOOL ISOPENED = FALSE;  
    if(vPopup.hidden == TRUE)  
    {  
        ISOPENED = FALSE;  
    }  
    else  
    {  
        ISOPENED = TRUE;  
    }  
    [vPopup setHidden:YES];  
    if(ISOPENED)  
    {  
        double delayInSeconds = 0.01;  
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,delayInSeconds * USEC_PER_SEC);

        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

            vPopup.frame = CGRectMake(
                (btn.frame.origin.x + (btn.frame.origin.x * (scroll.zoomScale-1))) - ((popupW/2)-(scroll.zoomScale)),
                btn.frame.origin.y+(btn.frame.origin.y * (scroll.zoomScale-1)) - popupH,
                popupW, popupH);


            [vPopup setHidden:NO];  
        });  
    }  
}

【问题讨论】:

  • 我不确定您要做什么,但是每当视图滚动时(可能是每秒 60 次),您都会隐藏 vPopup,然后尝试在 0.01 之后显示它秒,然后再次隐藏并在 0.01 秒后显示。
  • 我试图在视图滚动时始终显示 vPopup。
  • 这段代码到底发生了什么......为什么你不尝试一些不那么昂贵的东西,例如“scrollViewWillBeginDragging”或类似的东西来管理你的视图的可见性

标签: ios cocoa-touch uiscrollview


【解决方案1】:

你有没有尝试将 vPopup 放在 scrollView 的 superView 上?喜欢self.view

在您的代码中,每次滚动时都会隐藏 vPopup([vPopup setHidden:YES];)
但是在dispatch_after中显示,显示需要时间(>=delayInSeconds)。

只需删除[vPopup setHidden:YES][vPopup setHidden:NO]
或将vPopup 放在scrollView 的superView 中。

【讨论】:

  • 查看此照片链接 - docs.google.com/document/d/…
  • 可能是你调整vPopup.frame的方式不对。如果您不更改缩放比例,则 vPopup.frame 不应更改。但是当缩放比例不变时,您的代码会更改框架。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多