2016-07-21 3 views
0

У меня есть UILabel (но это относится к любым UIView). Я пытаюсь нарисовать ярлык на UIImage.Рисунок UILabel с трансформациями

Во-первых, я применил преобразование к метке:

let label = UILabel(frame: CGRectMake(0,0,100,100)) 
label.text = "Fizz Buzz" 
label.transform = CGAffineTransformRotate(label.transform, 5) 
label.transform = CGAffineTransformScale(label.transform, 2, 2) 
label.setTranslation(CGPointMake(10, 15), inView: view) 

Затем я хочу нарисовать этикетку на изображение.

UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0) 
let context = UIGraphicsGetCurrentContext() 
label.drawTextInRect(view.frame) 
let result = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

Теперь result UIImage, который появляется изображение этикетки с соответствующим текстом, но без преобразования. Как обеспечить, чтобы представление рисовало с помощью преобразований?

ответ

0

Вам нужно получить текущие данные UIImage не только для того, чтобы добавить текст к этому изображению. У меня есть простая функция, которая добавляет текст к изображению. Если вы используете UIImageView, вы можете получить к нему присвоенное в настоящее время изображение, передать его функции и установить образ, возвращенный функцией, этому UIImageView.

extension UILabel 
{ 
    func getRenderedImage() -> UIImage 
    { 
    UIGraphicsBeginImageContextWithOptions(self.frame.size, false, 0) 

    var context = UIGraphicsGetCurrentContext() 
    CGContextSaveGState(context) 

    self.layer.renderInContext(context!) 

    let renderedImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return renderedImage 
    } 
} 

Пример использования:

let newImage = label.getRenderedImage() 
imagView.image = newImage 
+0

Хм, это вероятно, будет работать, но мой способ рисования на UILabel к изображению на самом деле * почти * работа, он просто не применит правильное преобразование, которое я сделал в вид. Нельзя ли продолжать использовать ярлык и просто трансформировать ярлык, как он нарисован? – Kenneth

+0

, пожалуйста, разместите свой другой код, так как трудно полностью понять вашу проблему, просто взглянув на одну строку кода, которую вы опубликовали. Благодарю. –

+0

Конечно, я отредактировал сообщение для ясности. – Kenneth

0

Для начала небольшое изменение должно быть сделано в 3-й строке второго фрагмента кода. Заменить label.drawTextInRect(view.frame) на label.drawTextInRect(label.frame).

Однако, чтобы правильно поддерживать преобразования, я обнаружил, что самый простой способ - создать оболочку UIView. Все еще применяйте преобразования к метке, но нарисуйте представление оболочки на UIImage вместо метки. Используйте строку:

wrapperView.drawViewHierarchyInRect(wrapperView.frame, afterScreenUpdates: true) 
Смежные вопросы