我在UIScrollview
中有可缩放的图像。一旦图像滚动到用户的喜好,滚动视图就会被锁定。然后可以编辑UITextField
,并将其(当前)添加到UIImageView
。捕获并保存图像的上下文。
没有滚动,这很好,但是,上下文基于UIImageView
的框架。它如何捕获屏幕的可见部分,而忽略了导航栏和工具栏?用于保存图像的功能如下。
@IBAction func saveButtonPressed(sender: AnyObject) {
let newImage = imageStore.createImage(textLabelBottom.text, imageName: "image1") { () -> UIImage in
// Can't add the textLabel to imageView because its size changes
self.imageView.addSubview(self.textLabelBottom)
UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, false, 0.0)
let ctx = UIGraphicsGetCurrentContext()
self.imageView.layer.renderInContext(ctx)
self.imageToSave = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return self.imageToSave
}
imageStore.saveImage(newImage)
self.showActivityViewController()
}
我不想根据它在滚动视图中的位置保存图像的可见部分,并在静态点中使用textLabel
。无论缩放如何,代码都会将textLabel
添加到图像中的同一点,根据UIScrollView
,保存的图像非常小或非常大。
更新:我将代码更改为以下内容:
@IBAction func saveButtonPressed(sender: AnyObject) {
let newImage = imageStore.createImage(textLabelBottom.text, imageName: "image1") { () -> UIImage in
// Can't add the textLabel to imageView because its size changes
self.imageView.addSubview(self.textLabelBottom)
UIGraphicsBeginImageContextWithOptions(self.imageScrollView.bounds.size, false, UIScreen.mainScreen().scale)
let ctx = UIGraphicsGetCurrentContext()
let offset: CGPoint = self.imageScrollView.contentOffset
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y)
self.imageScrollView.layer.renderInContext(ctx)
self.imageToSave = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return self.imageToSave
}
imageStore.saveImage(newImage)
self.showActivityViewController()
}
这可以正常工作,但文本字段显然不合适。我是否将其添加到上下文中的特定CGPoint
?
更新2:
我的理解是CGContextTranslateCTM
将坐标系更改为您正在处理的图层的坐标系。在这种情况下,新的{0, 0}
将位于scrollview的偏移处。但是,当我想将文本字段放入上下文时,它不会显示在正确的位置(屏幕外)。尝试这样的事情:
@IBAction func saveButtonPressed(sender:AnyObject){ let newImage = imageStore.createImage(textLabelBottom.text,imageName:“image1”){() - >
中的UIImage // Can't add the textLabel to imageView because its size changes
self.imageView.addSubview(self.textLabelBottom)
UIGraphicsBeginImageContextWithOptions(self.imageScrollView.bounds.size, false, UIScreen.mainScreen().scale)
let ctx = UIGraphicsGetCurrentContext()
let offset: CGPoint = self.imageScrollView.contentOffset
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y)
self.imageScrollView.layer.renderInContext(ctx)
//Move to the correct point and render
CGContextMoveToPoint(ctx, /*point1*/, /*point2*/)
self.textLabelBottom.layer.renderInContext(ctx)
self.imageToSave = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return self.imageToSave
}
imageStore.saveImage(newImage)
self.showActivityViewController()
}
我还需要对上下文做些什么呢?