捕获UIScrollView和子视图

时间:2015-06-17 17:51:58

标签: iphone swift ios8 uiscrollview

我在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()
}

我还需要对上下文做些什么呢?

0 个答案:

没有答案