2015-01-02 70 views
8

我希望能夠使用UIPinchGesture調整UILabel的大小,不會造成質量損失。目前我可以調整它,但它變得非常模糊。調整UILabel的質量不會造成損失

這裏是我的代碼

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) 

這是我的手勢識別器

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) 

} 

什麼需要在這裏發生的是,當標籤幀進行縮放,文字的大小也需要爲改變好。 所以我改變框的字體大小應改變label.font = UIFont(name: "HelveticaNeue-Bold", size: self.label.frame.height)

這就是我來

<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 

字體大小也調整爲框架調整,我試圖做的是從字體大小開始,它呈現清脆。 我認爲正在進行的是,實際的標籤不會再次呈現。 有人知道發生了什麼或如何解決?

編輯:

在上面的文字是什麼,我想重新調整後的情況發生,在底部的文字是發生了什麼事

Top = Correct, Botton = Incorrect

我實現了,這是我創建的方式一個新的標籤與舊標籤的大小,然後將其添加到子視圖,我希望能夠在重新縮放時做到這一點,如果這是有意義的

+0

嘗試的UILabel的'adjustsFontSizeToFitWidth」屬性設置爲true,也不要手動更改字體大小。 – gabuh

+0

@gabuh label.adjustsFontSizeToFitWidth = true;什麼也沒做 – Johno2110

回答

0

創建一個UILabel的字體大小適合您的maxiumum放大規模。然後使用transform屬性將其縮放到其初始大小。另外,將adjustsFontSizeToFitWidth設置爲false。

+0

謝謝,我試過編碼,但是我沒有明白你的意思「然後使用transform屬性將它縮放到它的初始大小」 – Johno2110

+0

說你的UITextField高度最初應該是50分,並且你想要能夠將其擴展到最多500點的高度。首先,您需要找到匹配500點高度的字體大小(通過試驗和錯誤)。然後,將幀高設置爲500,將其寬度設置爲內容的寬度(例如,使用sizeThatFits或sizeToFit方法)。最後使用transform屬性縮放文本字段:'textField.transform = CGAffineTransformMakeScale(0.1,0.1)'。 – lassej

+0

好的,我剛剛編碼,當標籤處於初始尺寸時,它仍然模糊不清,直到您將其縮小爲止。 – Johno2110

1

我認爲你沒有更新字體大小,fontWithSize返回一個你應該分配給標籤的字體。

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

我嘗試過,但它仍然不會更改標籤字體大小。 – Johno2110

0

我已經複製你的代碼,並確實發現,上面的代碼只是更新標籤框架。實際上,字體大小未按照您的預期更新。

按照下面的代碼,你可以清楚地看到不同之處。

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:查看答案並查看結果。 – Kampai

+0

我已經將它放在我的代碼中,它是我最接近的,但是文本不會相對於框架進行轉換,如果將它縮放到很大,文本會消失。我希望能夠實現的是當框架縮放但文本不模糊時。 – Johno2110

+0

我檢查文字不模糊。並且如果您在文本的邊框處看到灰色線條而不是文本的默認陰影顏色。 – Kampai

0

試試這個

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


}