У меня есть два образа, один с изображением, другой с изображением, определенным с помощью методов CGContext, с одинаковым размером изображения и размером изображения, друг над другом. В раскадровке я могу установить оба изображения на «Aspect Fit», чтобы пользователи на разных устройствах все еще могли видеть изображение. Однако, когда я собираюсь что-то нарисовать на наложенном втором изображении, он не масштабирует его соответственно (или относительно первого изображения, хотя они имеют одинаковый размер). Как мне сделать второе изображение в наложенном изображении в том же масштабе, что и изображение ниже?Swift CGContext Aspect Fit
Пример кода:
import CoreGraphics
import UIKit
class Map: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var drawnImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
self.scrollView.minimumZoomScale = 1.0
self.scrollView.maximumZoomScale = 6.0
let data = grabData()
print(data!)
var img = UIImage(named: "floor1")
print(img!.size)
imageView.image = img
img = draw(imageView.bounds.size, data: data!)
print(img!.size)
drawnImageView.image = img
for c in drawnImageView.constraints {
if c.identifier == "constraintImageHeight" {
c.constant = img!.size.height * drawnImageView.bounds.width/img!.size.width;
break;
}
}
}
}
func draw(img: UIImage) -> UIImage {
UIGraphicsBeginImageContext(img.size)
let context = UIGraphicsGetCurrentContext()
// Drawing
let color = UIColor(red: 0.67, green: 0.4, blue: 0.56, alpha: 1)
CGContextSetStrokeColorWithColor(context, color.CGColor)
CGContextSetLineWidth(context, 2.0)
var y = 0
for _ in 0..<100 {
let b = CGRect(origin: CGPoint(x: 0, y: y), size: CGSize(width: 1200, height: 1))
CGContextStrokeRect(context, b)
y += 30
}
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
Update 1:
(заменить после '// Рисование') При загрузке с iPhone 5 тренажере, он не появляется в том же месте отношение к фотографии, как в симуляторе iPhone 6.
func draw(size: CGSize, data: [TotalLine]) -> UIImage {
UIGraphicsBeginImageContext(size)
let context = UIGraphicsGetCurrentContext()
let screen: CGRect = UIScreen.mainScreen().bounds
let x = screen.size.width, y = screen.size.height
// Drawing
//let color = UIColor(red: 0.67, green: 0.4, blue: 0.56, alpha: 1)
let color = UIColor.redColor()
CGContextSetStrokeColorWithColor(context, color.CGColor)
CGContextSetLineWidth(context, 2.0)
let line = CGRect(origin: CGPoint(x: (x/16), y: (y*0.502)), size: CGSize(width: (x/20), height: 2))
CGContextStrokeRect(context, line)
let test = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: x, height: y))
CGContextStrokeRect(context, test)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
Update 2:
iPhone 6:
iPhone 5:
Я хочу, чтобы красная линия, чтобы показать в между комнатами, как в iPhone 6 скриншоте. В iPhone 5 он немного ниже.
Update 3:
печати просмотров изображений:
iPhone 5:
Нарисованные Изображение Вид: кадр = (0 0; 600 536); Изображение вида: frame = (0 0; 600 536);
iPhone 6:
Drawn Изображение Вид: кадра = (0 0; 600 536); Изображение вида: frame = (0 0; 600 536);
Что такое 'x' и' y' в вашем обдуманном коде? нет никаких указаний и исходных значений. Вы вообще удалили цикл 'for'? Что именно не так на iPhone 5 по сравнению с iPhone 6? – alexburtnik
распечатать рамку изображения для обоих устройств прямо перед тем, как вы вызовете метод «draw» и укажите здесь здесь. – alexburtnik
Обновлено в вопросе ** Обновление 3 ** – caleb