class EditTextViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UIPopoverPresentationControllerDelegate, UITextViewDelegate, UIDocumentInteractionControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var textView: UITextView!
@IBOutlet var contentImageView: UIImageView!
func imageForTextView(UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(textView.bounds.size, false, 0)
view.layer.renderInContext(UIGraphicsGetCurrentContext())
var image = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
// println(image)
return image
}
}
以上代码具有我试图调用的功能。 imageForTextView()获取我的textView的屏幕截图并将其转换为UIImage。
class BackgroundEditTextViewController: UIViewController, UIPageViewControllerDataSource {
@IBAction func instagramButton(sender: AnyObject) {
println("yolo")
EditTextViewController().imageForTextView(EditTextViewController().self.textView)
// var editTextViewController = EditTextViewController()
// editTextViewController.imageForTextView(editTextViewController.textView)
}
}
BackgroundEditTextViewController类是我试图调用" imageForTextView()"的地方。当我点击" instagramButton"调用" imageForTextView()"我想在控制台中看到UIImage打印出来。但我一直收到这个错误fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
我试过制作" imageForTextView()"一个类功能但无济于事。
旁注:我在textView后面有一个UIImage,我希望将其包含在图片截图中,不太清楚如何修改我的imageForTextView()来截取textView& contentImageView。提前致谢。
答案 0 :(得分:1)
简单(而不是面向对象)的方式是与世界共享imageForTextView,这意味着在该行的func之前添加public - 它是一个简单的解决方案,但它会告诉你你的函数是否正常工作
public func imageForTextView(UIView) -> UIImage
另一种方法是使用一个委托来创建一个函数,该函数接收一个闭包作为符合imageForTextView签名的参数,如此
public func doSomeDelegate((UIView)->UIImage)
然后使用doSomeDelegate调用imageForTextView 这是一般的想法
你可以在官方快速指南中找到一个很好的解释 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html
浏览到谈论代表团的部分
答案 1 :(得分:0)
根据您的层次结构,您应该使用自定义委托或使函数imageForTextView共享。