ios - 我应该使用什么而不是 sizeToFit

标签 ios view sizetofit

我正在开发一个主视图填满整个屏幕的应用程序。这个主视图包含您可以认为是 Sprite 的 subview 。他们使用自己的代码四处游荡。他们四处游荡的逻辑可能会让他们游荡在屏幕之外。我想要做的是调整主视图的大小,以便它包含所有 subview 。不过,真正改变的不是 View 大小。正在改变的是缩放比例。有点像缩小谷歌地图 View 。我怎么做?触发它的将是一个手势识别器。

最佳答案

您应该使用三级 View 层次结构来执行此操作:

  • 顶层 View
    • 比例 View
      • Sprite View 0
      • Sprite View 1
      • Sprite View 2
      • 等等

设置缩放 View 的边界以包含所有 Sprite View 的框架。然后设置缩放 View 的变换,使其适合顶层 View 。

- (void)updateBoundsAndTransformOfView:(UIView *)scaledView {
    CGRect scaledBounds = CGRectNull;
    for (UIView *spriteView in scaledView.subviews) {
        scaledBounds = CGRectUnion(scaledBounds, spriteView.frame);
    }

    scaledView.bounds = scaledBounds;
    // Now scaledView's size is large enough to contain all of its subviews,
    // and scaledView's coordinate system origin is at the left edge of the
    // leftmost sprite and the top edge of the topmost sprite.

    UIView *topLevelView = scaledView.superview;
    CGRect topLevelBounds = topLevelView.bounds;
    CGFloat xScale =topLevelBounds.size.width / scaledBounds.size.width;
    CGFloat yScale = topLevelBounds.size.height / scaledBounds.size.height;
    CGFloat scale = MIN(xScale, yScale);
    scaledView.transform = CGAffineTransformMakeScale(scale, scale);
    scaledView.center = CGPointMake(CGRectGetMidX(topLevelBounds), CGRectGetMidY(topLevelBounds));
}

关于ios - 我应该使用什么而不是 sizeToFit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663309/

相关文章:

ios - 我将如何重构以下代码以使用 NSSet.objectsPassingTest()

javascript - 如何使用 drupal View 使图像流链接到内容或产品

ios - SizeToFit() 无法正常使用\n?

ios - 同时更改所有表格 View 单元格上的显示参数

iphone - 使用 SDWebImageDownloader 显示和隐藏 ActivityIndi​​cator

c# - 当 View 被渲染/实例化时通知 ViewModel

grails - grails 2将新列添加到f:table

swift - UiTableview 在 iOS 10 中不更新 sizetofit 但在 iOS 11 中工作

ios - UITextView 无法使用自动布局更改大小

ios - 如果图像的外部边界 react native ,如何剪掉图像