带有照片的UItextView,可将其全屏打开

问题描述 投票:-1回答:1

我正在尝试制作与Notes应用类似的应用。我有一个UITextView显示NSAttributedString。我可以使用NSTextAttachment添加照片,并且一切正常。

[现在,当用户点击照片时,我想显示一个新的UIViewController,它将以全屏显示所需的照片。我该如何实现? Notes应用具有确切的行为。

ios swift uitextview photokit
1个回答
0
投票

这是我所做的一旦我从didFinishPickingMediaWithInfo获取图像,我就会获得图像URL

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true)
        //1
        let attachment = NSTextAttachment()
        guard let image = info[.editedImage] as? UIImage else {
            print("No image found")
            return
        }
        //2
        guard let imageURL = info[.imageURL] as? URL else  {
            print("No url")
            return
        }
        //3
        let resizedImage =  self.resizeImage(image: image, targetSize: CGSize(width: txtView.frame.size.width, height: 200))
        //4
        attachment.image = resizedImage
        //5
        let attString = NSMutableAttributedString(attachment: attachment)
        txtView.textStorage.insert(attString, at: txtView.selectedRange.location)
        //6
        let range = NSString(string: attString.string).range(of: attString.string, options: String.CompareOptions.caseInsensitive)

        //7
        attString.addAttribute(.link, value: imageURL, range: range)
        //8
        txtView.attributedText = attString

    }

// 1

制作NSAttachmentVariable

// 2

获取ImageURL

// 3可选调整图像大小

// 4

将获取的图像添加到先前创建的附件中以显示在文本视图中

// 5

将附件插入到文本视图中

// 6

从textview字符串中获取整个图像的范围

// 7

将我们在// 2之前获得的获取的图像URL添加到附件中

// 8

将属性文本添加到文本视图中

现在使用textview中的shouldInteractWith从URL打开图像,不要忘记将UITextViewDelegate添加为控制器的扩展名

 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let newViewController = storyBoard.instantiateViewController(withIdentifier: "Details") as! DetailsImage
        let data = try? Data(contentsOf: URL)

        if let imageData = data {
            newViewController.image = UIImage(data: imageData)!
        }

        self.present(newViewController, animated: true, completion: nil)

        //UIApplication.shared.open(URL)
        return false
    }

这用于从您的文本视图中打开url,现在我们使用所获得的url,将其更改为data并将图像变量从另一个view controller设置为返回的数据

这里是另一个viewController


 import UIKit
  class DetailsImage: UIViewController{

    var image = UIImage()
    @IBOutlet weak var imgView: UIImageView!
    override func viewDidLoad() {
        imgView.image = image
    }
 }


就是这样,您可以在新打开的VC上设置导航按钮以返回到textView的vc

© www.soinside.com 2019 - 2024. All rights reserved.