2016-04-21 5 views
4

Lassen Sie uns sagen, dass ich ein UILabel massstabs CGAffineTransformScale wie so mit:Swift CGAffineTransformScale auf einer Skala, nicht von einer Skala

let scale = 0.5 
text = UILabel(frame: CGRectMake(100, 100, 100, 100)) 
text.text = "Test" 

UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 
    self.text.transform = CGAffineTransformScale(self.text.transform, scale, scale) 
}, completion: {(value : Bool) in 
    print("Animation finished") 
}) 

Dies funktioniert gut, wenn ich die UILabel um die Hälfte skalieren möchten. Aber wenn ich denselben Code noch einmal aufrufen würde, würde es mit einer Skalierung von 0,25 enden, da es wieder um die Hälfte skaliert wird.

Wäre es möglich, die CGAffineTransformScale immer auf die Hälfte des ursprünglichen UILabel-Rahmens zu skalieren, statt sie kumulativ zu skalieren?

Antwort

13

Swift 3:

text.transform = CGAffineTransform.identity 
UIView.animate(withDuration: 0.25, animations: { 
    self.text.transform = CGAffineTransform(scaleX: scale, y: scale) 
}) 
5

Sie skalieren die vorhandene Transformation. Erstellen Sie einfach eine neue Transformation:

self.text.transform = CGAffineTransformMakeScale(scale, scale) 
+1

oder 'CGAffineTransformScale (CGAffineTransformIdentity, Maßstab, Skala)' – ozgur