0

3 つのサブビューを持つページ分割された UIScrollView を作成しました。iPhone 5 を横向き (私が設計した向き) でテストした場合はうまく機能しますが、デバイスの解像度が変わるたびに機能しなくなります。

デバイスや向きに関係なく、フレームを正しい解像度にスケーリングするにはどうすればよいですか?

- (void)viewDidLoad {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;
}

- (IBAction)changePage {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;
    [self.scrollView scrollRectToVisible:frame animated:YES];
    pageControlBeingUsed = YES;
}
4

1 に答える 1

1

スクロール ビューを別のカスタム ビュー内に配置します。カスタム ビューで、layoutSubviews を次のように実装します。

@interface ViewScalesOneSubview : UIView
@property UIView *scalingSubview;//subview to scale
@end

@implementation ViewScalesOneSubview
-(void) layoutSubviews {
[super layoutSubviews];
CGRect parentBounds = [self bounds];
CGRect childBounds = [scalingSubview bounds];//unscaled
CGFloat scale = parentBounds.width / childBounds.width;
CGAffineTransform transform = CGAffineTransformMakeScale( scale , scale );
//fiddle with x,y translation to position as you like
scalingSubview.transform = transform;
}
@end

カスタム ビューを自動サイズ変更して、ウィンドウまたは任意のコンテナーに適合し、回転によって変化するようにします。このカスタム layoutSubviews と競合するため、スクロール ビューの自動サイズ変更を行わないでください。カスタム ビューのサイズが変更されると、scalingSubview が収まるようにスケーリングされます。両方の軸に同じスケールを使用することで、縦横比が維持されます。代わりにサイズを合わせたり、幅の代わりに高さを使用したりできます。

編集:

ビューをスケーリングするのではなく、ビューのサイズを変更するには、自動サイズ変更マスクを設定します。

scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

https://developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/autoresizingMask

これは、インターフェイス ビルダーでも実行できます。

于 2013-01-02T06:20:35.727 に答える