2016-03-31 9 views
1

Ich versuche, ein Video zu drehen und größer zu skalieren, wenn der Benutzer den Bildschirm in Querformat dreht.Mit CGAfflineTransformMakeScale/Rotation wird nur eine Aktion ausgeführt

- (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; 
    }; 
} 

Es gibt eine Reihe von Problemen. Erstens, wenn ich anfange, in die Landschaft zu rotieren, macht es nur eine Transformation, in dieser Konfiguration skaliert es es einfach.

Das zweite Problem ist, wenn ich zum Hochformat rotiere, ruft es für die Rotation auf, aber es dreht sich nie. Allerdings kann ich zwischen Landschaft links und Landschaft rechts hin und her gehen und es dreht sich richtig. Jede mögliche Hilfe würde sehr geschätzt werden

Antwort

2

Sie ersetzen im Wesentlichen die Drehungstransformation mit Skalaumwandlung. Um beide zu verwenden, müssen Sie CGAffineTransformConcat() verwenden.

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

Was den zweiten Teil, Sie brauchen keine weitere Drehung anwenden, stattdessen setzen sie mit CGAffineTransformIdentity auf Standard.

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

versuchen diese

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