2016-07-29 8 views
2

ich eine einfache UIView haben:cgaffinetransformmakescale und cgaffinetransformmakerotation Verwendung verformt meine Ansicht

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
view.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:view]; 
self.someView = view; 

Dann mache ich das

[UIView animateWithDuration:10 
         delay:1 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
    self.someView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - CGRectGetWidth(self.someView.frame)/2, 150); 

        CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI); 
        self.someView.transform = CGAffineTransformScale(transform, 2, 0.5); 

} 
       completion:^(BOOL finished) { 

       }]; 

Während diese einfache Animation ausgeführt wird, verformt wird. Soweit ich weiß, sollte es sich drehen und seine Größe ändern. Ich kann nicht verstehen warum es so passiert, wie kann ich es reparieren?

Dank

Antwort

1

Das Problem eine kombinierte Skalierung und Rotation animiert. Das Endergebnis ist das gleiche wie das separate Animieren, aber die Frames dazwischen sind nicht einfach zu definieren. Das Animationsframework macht also eine Vermutung und es ist nicht das, was Sie erwarten.

Wenn die Animation eine Drehung und Skalierung getrennt anzeigen soll, müssen Sie sie separat auf die Ansichtshierarchie anwenden. Zum Beispiel:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
view.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:view]; 
self.someView = view; 

UIView *innerView = [[UIView alloc] initWithFrame:view.bounds]; 
innerView.backgroundColor = [UIColor blueColor]; 
[view addSubview:innerView]; 
self.someInnerView = innerView; 

Die Animation teilt die Transformation:

[UIView animateWithDuration:10 
         delay:1 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        self.someView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - CGRectGetWidth(self.someView.frame)/2, 150); 

        self.someView.transform = CGAffineTransformMakeRotation(M_PI); 
        self.someInnerView.transform = CGAffineTransformMakeScale(2, 0.5); 

       } 
       completion:^(BOOL finished) { 

       }];