2010-08-16 4 views
16

Ich bin bestrebt, die ImageView-Eigenschaft eines UIBUtton zu drehen, ohne es zu skalieren. Das Bild in Frage ist 24x18 - breiter als es ist groß - aber einmal in Position gedreht wird das Bild skaliert, um diese Dimension zu halten - so dass mich mit einem sehr zerquetschten Bild. Wie kann ich das verhindern?So drehen Sie die ImageView in einer UIButton, und skalieren Sie es nicht

Unten ist mein Code ..

-(IBAction)rotateButton 
{ 
NSLog(@"Rotating button"); 

[UIView beginAnimations:@"rotate" context:nil]; 
[UIView setAnimationDuration:.5f]; 
if(CGAffineTransformEqualToTransform(button.imageView.transform, CGAffineTransformIdentity)) 
{ 
    button.imageView.transform = CGAffineTransformMakeRotation(M_PI/2); 
} else { 
    button.imageView.transform = CGAffineTransformIdentity; 
} 
[UIView commitAnimations]; 
} 

Diese nicht passiert, wenn ich die auf die Schaltfläche statt button.imageView verwandeln anwenden, so vermute ich, es eine Eigenschaft des Imageview ist, dass ich mach mich nicht richtig.

Ihre Hinweise & Buhrufe sind willkommen

M.

+0

FWIW, erhalte ich die squished Ergebnis, auch wenn die Transformation auf die Schaltfläche angewendet wird. Und es passiert nicht im Simulator, nur auf dem Gerät. – rounak

Antwort

1

ich die UIImageView Eigenschaft UIButtons sehr seltsam verhalten gesehen habe - es scheint, dass einige ihrer Eigenschaften nur gelesen, einschließlich der UIViewContentMode Einstellung das ist, worüber du hier sprichst.

Die beste Lösung, die ich gefunden habe, ist die "Schaltfläche mit einem Bild" Setup mit einem separaten UIImageView nachahmen, und eine leere benutzerdefinierte UIButton sitzt darüber. Bietet Ihnen viel mehr Flexibilität, um das Bild zu verwalten.

+1

Ich hatte ein ähnliches Problem mit gewöhnlichen UIImageViews und der Inhalt wird verrückt, wenn man rotiert (was nicht passieren sollte), das durch Setzen von contentMode auf "Center" behoben wurde - danke für diese Einsicht! – Adam

47

Bewerben folgenden Code bei der Initialisierung der Ansicht irgendwo in der Ansicht geladen. Das wird helfen. Die Antwort, die Sie oben bekam keine echte Antwort :)

button.imageView.clipsToBounds = NO; 
button.imageView.contentMode = UIViewContentModeCenter; 
+2

Das hat das Problem für mich gelöst! –

+0

Das funktioniert perfekt! –

+1

danke @Nikita das funktioniert für mich! – Desmond

1

ich gefunden habe, dass UIButton Subklassen die Transformation entfernen während layoutSubviews gearbeitet, wie folgt aus:

class RotatableImageButton: UIButton { 
    override func layoutSubviews() { 
     let originalTransform = imageView?.transform 
     imageView?.transform = CGAffineTransformIdentity 
     super.layoutSubviews() 
     if let originalTransform = originalTransform { 
      imageView?.transform = originalTransform 
     } 
    } 
} 
+0

funktioniert gut für mich! – Mete

Verwandte Themen