1

初心者向けの基本的なランドスケープ回転で変換を行う方法を学ぼうとしているので、次のかなり基本的なコードを使用しています

私はそれを長い道のりでやりたいと思っていました.

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
}


- (void)didRotate:(NSNotification *)notification
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (orientation == UIDeviceOrientationLandscapeRight)
    { 
        [UIView animateWithDuration:0.2f animations:^{
            self.view.layer.transform = CATransform3DMakeRotation(-M_PI/2, 0, 0.0, 1.0); 
            [self.scrollViewImages setContentSize:CGSizeMake(self.view.frame.size.width*self.images.count, 320.0)];
            [self.scrollViewImages setContentOffset:CGPointMake(0, 0) animated:YES];
        } completion:^(BOOL finished) {

        }];
    } else if(orientation == UIDeviceOrientationPortrait) {
        [UIView animateWithDuration:0.2f animations:^{ 
            self.view.frame = CGRectMake(0, 0, 320.0, 480.0);
            self.view.center = CGPointMake(160.0, 240.0);
            self.view.transform = CGAffineTransformIdentity;            
        } completion:^(BOOL finished) {

        }];
    }
}

ただし、ポートレートから初めて回転すると、これが得られます

肖像画 風景

しかし、ポートレートに戻して再度回転させると、 もう少し正しい

これがばかげた質問であるか、明らかな何かが欠けている場合は、本当に申し訳ありません。私は一般的にSOの助けを借りて自分で学んでいます:)

助けてくれてありがとう、良い人を。

4

1 に答える 1

0

ポートレートの中心またはフレームを変更した場合は、ランドスケープに戻す必要があります...また、回転するたびにスクロールビューの contentSize を変更する必要があります。

このようなことを試してください...

- (void)didRotate:(NSNotification *)notification
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (orientation == UIDeviceOrientationLandscapeRight)
    { 
        [UIView animateWithDuration:0.2f animations:^{
            self.view.frame = CGRectMake(0, 0, 480.0, 320.0);
            self.view.center = CGPointMake(240.0, 160.0);

            self.view.layer.transform = CATransform3DMakeRotation(-M_PI/2, 0, 0.0, 1.0); 
            [self.scrollViewImages setContentSize:CGSizeMake(self.view.frame.size.width*self.images.count, 320.0)];
            [self.scrollViewImages setContentOffset:CGPointMake(0, 0) animated:YES];
        } completion:^(BOOL finished) {

        }];
    } else if(orientation == UIDeviceOrientationPortrait) {
        [UIView animateWithDuration:0.2f animations:^{ 
            self.view.frame = CGRectMake(0, 0, 320.0, 480.0);
            self.view.center = CGPointMake(160.0, 240.0);
            self.view.transform = CGAffineTransformIdentity;            

            [self.scrollViewImages setContentSize:CGSizeMake(self.view.frame.size.width*self.images.count, 320.0)];
            [self.scrollViewImages setContentOffset:CGPointMake(0, 0) animated:YES];

        } completion:^(BOOL finished) {

        }];
    }
}
于 2013-02-13T03:25:51.457 に答える