2

写真アプリのように回転機能を実装する必要があります。UIImageView内部を持つUIScrollView。デバイスが回転すると、画像が写真のように横向きに回転するようにします。画像が横長の場合、UIScrollViewの幅全体が回転アニメーションで埋められます。次のコードの場合

[UIView animateWithDuration:0.36
               animations:^(void){
                [_imageView setTransform:CGAffineTransformMakeRotation(M_PI*90/180)];
                 _imageView.frame = CGRectMake(0, 0, 480, 320); //set the frame after the rotate
                self.contentSize = CGSizeMake(480, 320); //set the content-size of the scrollview
               }
               completion:^(BOOL complete){
               }];

しかし、これはうまくいきません。回転は起こりますが、 の位置が_imageView正しくないか、画像が幅を埋めませんでした。変換前に注文フレームとコンテンツサイズを変更しても、まだ正しくありません。

これを行うための正しいアプローチは何ですか?

4

3 に答える 3

1

私の意見では、正解は回転を自分でまったくアニメートしないことです。

iOS 6最新のガイドラインに従って作業している場合viewsは、ViewControllerそのlayoutSubviews()方法で自分を再配置するだけです。

于 2012-10-08T09:00:15.660 に答える
1

WWDC 2010 Video: Designing Apps with Scrolls Viewsは、これを行う方法を正確に示しています。

于 2013-01-04T06:34:45.733 に答える
0

@CoDEFRo が参照しているソース コードは次のようなものですが、ここでは UIScrollView のデリゲート メソッド scrollViewDidScroll: に入れています。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {   
    CGSize boundsSize = scrollView.bounds.size;
    CGRect frameToCenter = self.imageView.frame;

    if (frameToCenter.size.width < boundsSize.width)
        frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
    else
        frameToCenter.origin.x = 0;

    if (frameToCenter.size.height < boundsSize.height)
        frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
    else
        frameToCenter.origin.y = 0;

    self.imageView.frame = frameToCenter;
}
于 2013-08-14T18:06:52.440 に答える