2015-01-02 2 views
8

Я хочу, чтобы иметь возможность изменять размер UILabel с помощью UIPinchGesture, без потери качества. На данный момент я могу изменить его размер, хотя он становится действительно размытым.Изменение размера 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 

Размер шрифта делает настроить так как кадр регулирует, я попытался сделать, что размер шрифта от начало, и оно становится четким. То, что я думаю, это то, что фактический ярлык не возвращается повторно. Кто-нибудь знает, что происходит или как это исправить?

Edit:

Текст на вершине, что я хочу чтобы это произошло после того, как Rescale, текст внизу то, что происходит

Top = Correct, Botton = Incorrect

так, как я достиг этого я был создан новый ярлык с размером старой метки, а затем добавил его в подзаголовок, я хочу иметь возможность сделать это при масштабировании, если это имеет смысл

+0

Попробуйте установить свойство 'adjustsFontSizeToFitWidth» в UILabel истинно, и не изменять размер шрифта вручную. – gabuh

+0

@gabuh label.adjustsFontSizeToFitWidth = true; ничего не делает – Johno2110

ответ

0

Создайте UILabel с размером шрифта, который соответствует вашему максимальному масштабируемому значению масштаб. Затем используйте свойство transform, чтобы масштабировать его до его начального размера. Кроме того, установите для параметраFontSizeToFitWidth значение 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 
    } 
} 


} 
Смежные вопросы