Масштабирование изображения с помощью uiscrollview работает неожиданно. быстрый - PullRequest
0 голосов
/ 07 ноября 2018

Я разрабатывал приложение, в котором пользователь добавляет фотографию и редактирует ее. Когда изображение добавляется в imageView и увеличивается, оно работает нормально, но когда я добавляю новое изображение, неожиданно увеличивается длина scrollView, и изображение просматривается посередине scrollView, но код scrollView увеличивается в размере. Я должен прокрутить до середины, чтобы посмотреть изображение. Ниже приведен код, который я использую.

 @IBAction func addPhotoTrigered(_ sender: Any) {
     addPhotoCall()
    }

    func addPhotoCall() {
        print("dsds")
        let image = UIImagePickerController()
        image.delegate = self
        image.sourceType = UIImagePickerControllerSourceType.photoLibrary
        image.allowsEditing = false
        self.present(image, animated: true) {
        }
    }
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        imagePic = info[UIImagePickerControllerOriginalImage] as? UIImage
           addImageView.isHidden = true
            imageView.image = imagePic
            newImageButton.isHidden = false
            photoStatus = true
            imageView.contentMode = UIViewContentMode.center
        imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: imagePic!.size.width, height: imagePic!.size.height))
        print(imageView.frame)
        scrollView.contentSize = imagePic!.size
        let scrollViewFrame = scrollView.frame
        let scrollWidth = scrollViewFrame.size.width / scrollView.contentSize.width
        let scrollHeight = scrollViewFrame.size.height / scrollView.contentSize.height
        let minScale = min(scrollHeight, scrollWidth)
        scrollView.minimumZoomScale = minScale
        scrollView.maximumZoomScale = 1.0
        scrollView.zoomScale = minScale
        centreScrollViewContent()
        self.dismiss(animated: true, completion: nil)

    }
    func centreScrollViewContent() {
        let boundSize = scrollView.bounds.size
        var contentFrame = imageView.frame
        if contentFrame.size.width < boundSize.width {
            contentFrame.origin.x = (boundSize.width - contentFrame.size.width) / 2
        } else {
            contentFrame.origin.x = 0
        }
        if contentFrame.size.height < boundSize.height {
            contentFrame.origin.y = (boundSize.height - contentFrame.size.height) / 2
        } else {
            contentFrame.origin.y = 0
        }
        imageView.frame = contentFrame
    }


    func scrollViewDidZoom(_ scrollView: UIScrollView) {
        centreScrollViewContent()
    }
    func viewForZooming(in scrollView: UIScrollView) -> UIView? {

        return imageView
    }
@IBAction func newImageTrigered(_ sender: Any) {
    imageView.image = nil
    addImageView.isHidden = false
    newImageButton.isHidden = true
}

пожалуйста, исправьте код. Я пробовал много способов, но не смог понять, почему это происходит.

1 Ответ

0 голосов
/ 07 ноября 2018

создайте выход из представления прокрутки, добавьте делегат self и добавьте uiscrollViewDelegate в viewcontroller, после чего он должен работать у меня есть пример кода

class ViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    scrollView.delegate = self
    updateZoomFor(size: scrollView.bounds.size)
}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
}

func updateZoomFor(size: CGSize) {
    let widthScale = size.width / imageView.bounds.width
    let heightScale = size.height / imageView.bounds.height
    let scale = min(widthScale, heightScale)
    scrollView.minimumZoomScale = scale
    scrollView.maximumZoomScale = 5
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...