2015-01-02 26 views
8

Kalite kaybı olmadan, bir UIPinchGesture kullanarak bir UILabel'ı yeniden boyutlandırmak istiyorum. Şu anda yeniden boyutlandırabilirim, ancak bulanıklaşıyor. İşte Kalite kaybı olmadan UILabel'ı yeniden boyutlandırma

burada olması gereken etiket çerçeve ölçekli edildiğinde nedir

func handleScale(recognizer: UIPinchGestureRecognizer) 
{ 
    recognizer.view!.transform = CGAffineTransformScale(recognizer.view!.transform, 
     recognizer.scale, recognizer.scale) 
    recognizer.scale = 1 
     recognizer.view!.frame = CGRectMake(recognizer.view!.frame.minX, recognizer.view!.frame.minY, recognizer.view!.frame.width, recognizer.view!.frame.height) 

    println(recognizer.view!.frame) 
    println(self.label.font.fontWithSize(recognizer.view!.frame.height)) 
    println(self.label.frame) 

} 

, metnin boyutu da değişmeye gerek Bu benim jest tanıyıcı benim Kod

label = UILabel(frame:CGRectMake(0,100,300,50)) 
    label.text = "Hellow World" 
    label.textColor = UIColor.blueColor() 
    label.font = UIFont(name: "HelveticaNeue-Bold", size: self.label.frame.height) 
    self.view.addSubview(label) 

    self.resizeRecognizer = UIPinchGestureRecognizer(target: self, action: Selector("handleScale:")) 
    self.rotateRecognizer = UIRotationGestureRecognizer(target: self, action: Selector("handleRotate:")) 

    label.userInteractionEnabled = true 
    label.addGestureRecognizer(self.resizeRecognizer) 

olduğunu iyi. Ben çerçeveyi değiştirmek olarak Yani yazı boyutunu Bu ben yazı tipi boyutu olduğunu yapma denedi, çerçeve ayarlar olarak yazı boyutunu ayarlamak gelmez

<UICTFont: 0x7ffb39e17ba0> font-family: "Helvetica Neue"; font-weight: bold; font-style: normal; font-size: 578.77pt 
<UICTFont: 0x7ffb3ca03ed0> font-family: "Helvetica Neue"; font-weight: bold; font-style: normal; font-size: 594.29pt 

gelmiş budur label.font = UIFont(name: "HelveticaNeue-Bold", size: self.label.frame.height)

değişmelidir başlangıç ​​ve keskin hale getirir. Neler olduğunu düşünüyorum, asıl etiket yeniden oluşturulmuyor. Neler olup bittiğini veya nasıl düzeltileceğini bilen var mı? Düzenleme

:

metin üstte ben Rescale sonra ne istediğiniz şeydir, metin altta

Top = Correct, Botton = Incorrect

bu benim yarattığım oldu elde yolu olup bitenler eski etiketin boyutlandırması ile yeni bir etiket daha sonra alt gösterime ekledim, eğer bu herhangi bir anlam ifade ederse yeniden ölçeklendirmek için bunu yapmak istiyorum

+0

true UILabel arasında 'adjustsFontSizeToFitWidth nitelikleriyle deneyin deneyin ve yazı tipi boyutunu el değiştirmez. – gabuh

+0

@gabuh label.adjustsFontSizeToFitWidth = true; bir şey yapmıyor – Johno2110

cevap

0

Kendi maxumum zoom'unuza uyan bir yazı tipi boyutuyla bir UILabel oluşturun ölçeği. Ardından, ilk büyüklüğüne ölçeklendirmek için dönüştürme özelliğini kullanın. Ayrıca, false olarak ayarlayınFontSizeToFitWidth.

+0

Teşekkürler, ben kodlamayı denedim ama ne demek istediğimi anlayamıyorum "Sonra onu başlangıç ​​boyutuna ölçeklemek için dönüşüm özelliğini kullan" – Johno2110

+0

UITextField yüksekliğinizin başlangıçta 50 puan olması gerektiğini ve En fazla 500 noktaya kadar ölçeklendirebilmek. Öncelikle 500 puanlık bir yüksekliğe (deneme yanılma hatası) uyan yazı tipi boyutunu bulmanız gerekir. Daha sonra çerçeve yüksekliğini 500'e ve genişliğini içeriğin genişliğine (örneğin, sizeThatFits veya sizeToFit yöntemini kullanarak) ayarlarsınız. Son olarak, dönüştürme özelliğini kullanarak metin alanını ölçeklendirin: 'textField.transform = CGAffineTransformMakeScale (0.1, 0.1)'. – lassej

+0

Tamam, sadece kod yazdım, etiket başlangıç ​​boyutunda olduğunda, siz onu yeniden ölçeklendirene kadar hala bulanık. – Johno2110

1

Yazı tipi boyutunu güncelleştirmediğinizi düşünüyorum, fontWithSize etikete atamanız gereken bir yazı tipi döndürür.

func handleScale(recognizer: UIPinchGestureRecognizer) 
{ 
    self.test.transform = CGAffineTransformScale(self.test.transform, recognizer.scale, recognizer.scale) 
    recognizer.scale = 1 


    println(recognizer.view!.frame) 


    self.test.font = self.test.font.fontWithSize(recognizer.view!.frame.height) 
    println(self.test.font) 
    println(self.test.frame) 


} 
+0

Bunu denedim, ancak yine de etiket yazı tipi boyutunu değiştirmiyor. – Johno2110

0

Kodunuzu kopyaladım ve yukarıdaki kodun üzerindeki etiket çerçevesini güncellemeyi öğrendim. Yazı tipi boyutu beklediğiniz gibi güncellenmiyor.

Aşağıdaki kodu izleyin ve farklılıkları açıkça görebilirsiniz.

import UIKit 

class ViewController: UIViewController { 

    var resizeRecognizer: UIPinchGestureRecognizer! 
    var rotateRecognizer: UIRotationGestureRecognizer! 
    var label: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     label = UILabel(frame:CGRectMake(50,300,300,50)) 
     label.text = "Hello World" 
     label.textColor = UIColor.blueColor() 
     label.font = UIFont(name: "HelveticaNeue-Bold", size: 18) 
     label.backgroundColor = UIColor.darkGrayColor() 
     self.view.addSubview(label) 

     self.resizeRecognizer = UIPinchGestureRecognizer() 
     self.resizeRecognizer.addTarget(self, action: Selector("handleScale:")) 
     label.userInteractionEnabled = true 
     label.addGestureRecognizer(self.resizeRecognizer) 
    } 

    func handleScale(recognizer: UIPinchGestureRecognizer) 
    { 
     recognizer.view!.transform = CGAffineTransformScale(recognizer.view!.transform, 
      recognizer.scale, recognizer.scale) 
     recognizer.scale = 1 
     recognizer.view!.frame = CGRectMake(0, recognizer.view!.frame.minY, recognizer.view!.frame.width, recognizer.view!.frame.height) 

     label.frame = CGRectMake(recognizer.view!.frame.minX, recognizer.view!.frame.minY, recognizer.view!.frame.width, recognizer.view!.frame.height) 
     label.font = UIFont(name: self.label.font.fontName, size: recognizer.view!.frame.height) 

     // Or Suggested solution 
     var fontSize = CGFloat(recognizer.view!.frame.height/2) 

     label.font = UIFont(name: self.label.font.fontName, size: recognizer.view!.frame.height - fontSize) 

    } 
} 
+0

@ Johno2110: Bu cevabı kontrol edin ve sonucu görün. – Kampai

+0

Bunu koduma yerleştirdim, henüz geldiğim en yakın olanı, ancak metnin çerçeveye göre dönüşmemesi, metnin büyüklüğüne ölçeklendirilmesi durumunda kayboluyor. Çerçeveyi ölçeklendirmek ancak metni bulanık olmayan bir şekilde elde etmek istediğim şey, elde edebilmek. – Johno2110

+0

Metnin bulanık olmadığını kontrol ettim. Ve metnin kenarlıklarındaki gri çizgileri, metnin varsayılan gölge renginden daha görüyorsanız. – Kampai

0

bu

import UIKit 

class ViewController: UIViewController { 

let label = UILabel() 
let pinchRecognizer = UIPinchGestureRecognizer() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    label.text = "first line\nsecond line" 
    label.textAlignment = NSTextAlignment.Center 
    label.font = UIFont(name: "Menlo-Regular", size: 25) 
    label.numberOfLines = 0 
    label.sizeToFit() 
    label.center = self.view.center 
    self.view.addSubview(label) 

    pinchRecognizer.addTarget(self, action: "changeFontSize") 
    self.view.addGestureRecognizer(pinchRecognizer) 
} 

func changeFontSize() { 

    if pinchRecognizer.state == .Began { 

     pinchRecognizer.scale = label.font.pointSize * 0.1 
    } 

    if 1 <= pinchRecognizer.scale && pinchRecognizer.scale <= 5 { 

     let cent = label.center 
     label.font = UIFont(name: label.font.fontName, size: pinchRecognizer.scale * 10) 
     label.frame.size.width = 999 
     label.numberOfLines = 2 
     label.sizeToFit() 
     label.center = cent 
    } 
} 


} 
İlgili konular