2012-12-01 110 views
1

我正在研究主視圖填滿整個屏幕的應用程序。這個主視圖包含你可以認爲是精靈的子視圖。他們使用自己的代碼漫遊。他們如何四處流浪的邏輯可能讓他們在屏幕上游蕩。我想要做的是調整主視圖的大小,使其包含所有的子視圖。儘管如此,它並不是視圖大小發生變化。這是不斷變化的規模。有點像縮小谷歌地圖視圖。我怎麼做?這將是一個觸發這一點的手勢識別器。而不是sizeToFit我應該使用什麼

回答

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)); 
} 
+0

謝謝。這似乎是可行的,而且我比我想的更好,那就是使用UIScrollView。它並沒有跨過我的想法來添加另一個圖層。謝謝。 –

+0

剛剛完成這個,它就像一個魅力。 –

相關問題