2016-10-29 7 views
0

Конечная цель - щелкнуть фотографию с помощью камеры, а затем иметь изображение, а наклейка наложить на нее фотографию, а затем сохранить композицию из трех слоев ,Нужна помощь в позиционировании ярлыка в контексте (Swift 3)

У меня есть большая часть его работы - единственная часть, которую я не могу понять, - это правильно разместить этикетку.

Мне хотелось бы, чтобы размеры метки были чем-то вроде (x: 0, y: 500, ширина: 416, высота: 55), но всякий раз, когда я устанавливал эти координаты, метка становится супер искаженной.

Я также попытался установить их на (0, 0, 416, 553), которые являются полными размерами фотографии & наложения, но это просто позиционирует метку в абсолютном центре.

Вот код, я использую:

func generateImageWithText(text: String) -> UIImage { 
    let image = UIImage(named: "9thGup-43")! 

    let imageView = UIImageView(image: image) 
    imageView.backgroundColor = UIColor.clear 
    imageView.frame = CGRect(x: 0, y: 0, width: 414, height: 553) 
    imageView.contentMode = .scaleAspectFit 

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 414, height: 553)) 
    label.backgroundColor = UIColor.clear 
    label.textAlignment = .center 
    label.textColor = UIColor.white 
    label.font = UIFont(name: "Japan", size: 45)! 
    label.text = text 
    label.adjustsFontSizeToFitWidth = true 
    label.minimumScaleFactor = 0.5 

    let customSize = CGSize(width: 414.0, height: 553.0) 

    UIGraphicsBeginImageContextWithOptions(customSize, false, 0); 
    imageView.layer.render(in: UIGraphicsGetCurrentContext()!) 
    label.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let imageWithText = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext(); 

    return imageWithText! 
} 

Кто-нибудь знает, как я могу правильно расположить метку так, чтобы она сидит в нижней части составного изображения, которое я создаю?

ответ

0

Все, что вам нужно сделать, это изменить размер рамки и нажать ее. Я не знаю, что в стороне нижних средств, так что я собираюсь сказать, что вы хотите, чтобы метка центрируется по вертикали в нижней трети изображения:

let frame = imageView.frame 
let label = UILabel(frame: CGRect(x: 0, y: frame.size.height * 0.67, width: frame.size.width, height: frame.size.height * 0.33)) 
+0

При использовании вещи, как «frame.size.height», что означает «кадр»? Это тот кадр, который вы создаете с помощью «frame: CGRect», или это другой объект в представлении? –

+0

Кроме того, похоже, что вы вычисляете ширину и высоту программно. Могли бы вы технически просто ввести туда значения int (т. Е. Координаты на экране)? Я имею в виду - я пробовал это раньше, и мне не повезло ... но просто любопытно, почему это не сработало. –

+0

Я выражаю y-позицию и высоту с точки зрения высоты изображения. если вы всегда жестко кодируете его, тогда вы должны его перекодировать, если изменяется высота изображения. На самом деле вам не нужен весь кадр; высота была бы достаточной. –