0

縦向き以外のすべての向きをサポートしたい。簡単なことをしたかったのですが、解決策を見つけることができませんでした。

インターフェイスには 6 つの大きなボタンがあります。さらに2つの極小ボタン。

向きが変わると、8 つのボタンすべてを同じ中央/場所に保持したいのですが、6 つの大きなボタンを回転させて、正しい方向を向くようにしたかっただけです。

設定してみた

- (BOOL)shouldAutorotate
{
    return NO;
}

自分自身に通知を送信しますが、正しい位置に回転するには、古い向きと新しい向きに対処する必要があります。他に可能性はありますか?さらに、向きが変更された後に通知が送信されたため、以前の向きを取得できませんでした (UIDeviceOrientationDidChangeNotification)

4

1 に答える 1

1

これは、ビューが回転するときにボタンの画像を回転させるために使用するものです。

- (BOOL)shouldAutorotate {
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDeviceOrientationDidChangeNot:) name:UIDeviceOrientationDidChangeNotification object:nil];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}  

- (void)handleDeviceOrientationDidChangeNot:(NSNotification *)not {
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    CGFloat angle = 0.0;
    switch (orientation) {
        case UIDeviceOrientationPortrait:
            angle = 0.0;
            break;
        case UIDeviceOrientationLandscapeLeft:
            angle = M_PI/2;
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            angle = M_PI;
            break;
        case UIDeviceOrientationLandscapeRight:
            angle = -M_PI/2;
            break;
        default:
            return;
            break;
    }

    [UIView animateWithDuration:0.35 animations:^{
        self.someButton.imageView.transform = CGAffineTransformMakeRotation(angle);
    } completion:^(BOOL finished) {
        //
    }];
}
于 2013-07-28T11:45:49.163 に答える