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的屏幕快照。提前致谢。
最佳答案
一种简单的方法(不是面向对象的)是与世界共享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
浏览到有关授权的部分