而不是sizeToFit我应该使用什么

时间:2012-12-01 20:14:50

标签: ios view sizetofit

我正在开发一个主视图填满整个屏幕的应用。此主视图包含您可以将其视为精灵的子视图。他们使用自己的代码四处游荡。他们如何四处游荡的逻辑可能让他们在屏幕上徘徊。我想要做的是调整主视图的大小,使其包含所有子视图。但是,视图大小确实不会改变。缩放正在发生变化。有点像缩小谷歌地图视图。我怎么做?这将是一个手势识别器触发它。

1 个答案:

答案 0 :(得分:1)

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

  • 顶级视图
    • 缩放视图
      • 精灵视图0
      • 精灵视图1
      • 精灵视图2

设置缩放视图的边界以包含所有精灵视图的帧。然后设置缩放视图的变换,使其适合顶级视图。

- (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));
}