1
我正在研究主視圖填滿整個屏幕的應用程序。這個主視圖包含你可以認爲是精靈的子視圖。他們使用自己的代碼漫遊。他們如何四處流浪的邏輯可能讓他們在屏幕上游蕩。我想要做的是調整主視圖的大小,使其包含所有的子視圖。儘管如此,它並不是視圖大小發生變化。這是不斷變化的規模。有點像縮小谷歌地圖視圖。我怎麼做?這將是一個觸發這一點的手勢識別器。而不是sizeToFit我應該使用什麼
我正在研究主視圖填滿整個屏幕的應用程序。這個主視圖包含你可以認爲是精靈的子視圖。他們使用自己的代碼漫遊。他們如何四處流浪的邏輯可能讓他們在屏幕上游蕩。我想要做的是調整主視圖的大小,使其包含所有的子視圖。儘管如此,它並不是視圖大小發生變化。這是不斷變化的規模。有點像縮小谷歌地圖視圖。我怎麼做?這將是一個觸發這一點的手勢識別器。而不是sizeToFit我應該使用什麼
你應該這樣做使用三級視圖層次:
設置縮放視圖的邊界以包含所有的子畫面視圖的幀。然後設置縮放視圖的變換,使其適合頂層視圖。
- (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));
}
謝謝。這似乎是可行的,而且我比我想的更好,那就是使用UIScrollView。它並沒有跨過我的想法來添加另一個圖層。謝謝。 –
剛剛完成這個,它就像一個魅力。 –