Использование 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;