Использование CGAfflineTransformMakeScale/Rotation выполняет только одно действие

1 Kyle Griffith [2016-03-31 07:06:00]

Я пытаюсь сделать видео поворот и увеличить масштаб, когда пользователь поворачивает экран на пейзаж.

- (void) orientationChanged:(NSNotification *)note
{
    bool switchedLeft;
    UIDevice * device = note.object;
    switch(device.orientation)
    {
        case UIDeviceOrientationPortrait:
            self.videoView.transform=CGAffineTransformMakeScale(0.5,0.5);

            if (switchedLeft) {
                self.videoView.transform=CGAffineTransformMakeRotation(-M_PI_2);

            }else{
                self.videoView.transform=CGAffineTransformMakeRotation(M_PI_2);
            }
            break;
        case UIDeviceOrientationLandscapeLeft:
            self.videoView.transform=CGAffineTransformMakeRotation(M_PI_2);
            self.videoView.transform=CGAffineTransformMakeScale(2.0, 2.0);
            switchedLeft=true;
            break;

        case UIDeviceOrientationLandscapeRight:
            self.videoView.transform=CGAffineTransformMakeRotation(-M_PI_2);
            self.videoView.transform=CGAffineTransformMakeScale(2.0, 2.0);
            switchedLeft=false;
            break;

        default:
            break;
    };
}

Существует ряд проблем. Во-первых, когда я изначально вращаюсь в ландшафт, он только делает одно преобразование, в этой конфигурации он просто масштабирует его.

Вторая проблема заключается в том, что когда я поворачиваюсь на портрет, он вызывает вращение, но он никогда не вращается. Однако я могу перемещаться между ландшафтом влево и вправо вправо, и он вращается правильно. Любая помощь будет принята с благодарностью

ios objective-c iphone cgaffinetransform


2 ответа


2 Решение ZeMoon [2016-03-31 07:15:00]

Вы по существу заменяете преобразование поворота на масштабное преобразование. Чтобы применить оба CGAffineTransformConcat(), вам нужно использовать CGAffineTransformConcat().

CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI_2);
CGAffineTransform scale = CGAffineTransformMakeScale(2.0, 2.0);
self.videoView.transform = CGAffineTransformConcat(rotate, scale);

Что касается второй части, вам не нужно применять другое вращение, вместо этого установите ее по умолчанию с помощью CGAffineTransformIdentity.

case UIDeviceOrientationPortrait:
    CGAffineTransform scale = CGAffineTransformMakeScale(0.5,0.5);
    self.videoView.transform = CGAffineTransformConcat(CGAffineTransformIdentity, scale);
    break;

0 Moin Shirazi [2016-03-31 07:29:00]

попробуй это

CGAffineTransform transform = CGAffineTransformRotate(self. videoView.transform, M_PI);
self. videoView.transform = transform;