代码之家  ›  专栏  ›  技术社区  ›  diatrevolo

为什么我必须以任意数量重新定位此uiview?

  •  0
  • diatrevolo  · 技术社区  · 15 年前

    我正在构建一个应用程序,它必须在滚动视图完成缩放后添加覆盖视图。我在将覆盖添加到ScrollView本身并保持位置一致时遇到了问题,因为我假设ScrollView没有缩放…没有什么大不了的…所以我决定将覆盖添加到SharedApplication的keyWindow。

    现在,应用程序是横向的,我必须对覆盖层进行转换以使其正确定向……这很好。问题出在必须重新定位覆盖的这个看似任意的数量,以使它集中…我不喜欢做这种特别的事情,所以我想我会问是否有人遇到这样的事情,以及为什么视图必须重新定位这种奇怪的偏移。任何洞察都是伟大的。

    CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
    tempOverlay.view.transform = transform;
    
    // Repositions and resizes the view.
    CGRect contentRect = CGRectMake(-107, -80, 480, 320); //where does this offset come from?!?
    tempOverlay.view.bounds = contentRect;
    
    [[[UIApplication sharedApplication] keyWindow] addSubview:tempOverlay.view];
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   imaginaryboy    15 年前

    我本来打算把这篇文章作为评论而不是回复,但我还是选择回复路线,尽管我觉得这里没有足够的信息来继续。下面假设您有一个相当标准的iOS应用程序,除了将视图附加到keywindow的覆盖异常之外。

    首先,不要将覆盖视图附加到keywindow。相反,在根视图控制器上定义一些方法,请求显示覆盖。然后,在根视图控制器代码中,将覆盖视图添加到控制器的视图中,高于所有其他视图。

    然后,不要应用转换,因为它不再需要旋转视图。

    在创建视图时,将其设置为 frame 成为 bounds 根控制器视图的。还可以通过 autoresizingMask uiview的。那么假设你的根uiview有它 autoresizesSubview 属性设置为“是”,覆盖视图将在更改方向时调整大小以匹配根视图的大小。

    如果在所有这些之后,覆盖内容的位置 UIView 是不正确的,那么我怀疑问题就在其中 UIVIEW 与你的帧/边界中任何魔法数字的需要无关。

    注:我还没有尝试过以上的方法,我也不完全相信你的根 UIVIEW 另一方面,它可能仍然幸福地不知道这一点,一切都会正常工作。不管怎样,对我来说,这感觉比你目前正在做的要“特别”的多。