Есть ли способ ущипнуть и изменить масштаб программно добавленного изображения? - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь выяснить, как добавить возможности пинч / масштабирования к imageView, но конкретно к тому, который я добавил в scrollView программно.Мне удалось найти несколько отличных примеров для SO, чтобы сжимать и масштабировать изображение, используя представление прокрутки с viewForZooming, но в этом случае мне пришлось возвращать представление изображения сжимаемым и масштабируемым, что не работает, если я возвращаю его программно.

Моя конечная цель состоит в том, чтобы иметь массив изображений, где пользователь может прокручивать влево и вправо, чтобы увидеть все изображения и иметь возможность увеличивать их, в основном так же, как если бы они просматривали свой photoStream.Я нашел хороший учебник по динамическому добавлению изображений для прокрутки здесь https://www.codementor.io/taiwoadedotun/ios-swift-implementing-photos-app-image-scrolling-with-scroll-views-bkbcmrgz5#comments-bkbcmrgz5, но я не понимаю, как добавить viewForZooming, поскольку представления изображений динамически обрабатываются .addSubview в цикле.

Я создалНебольшой пример с представлением коллекции 0-n изображений, связанных с постом.После касания collectionViewCell с изображением появляется скрытый scrollView с новым динамическим UIImageView, добавленным в качестве subView.Все отлично работает, но я не знаю, как добавить пинч / зум сейчас.

@objc func imageTapped(_ sender: UITapGestureRecognizer) {
    print("BlipeFile Image Tapped")
    let imageView = sender.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    //newImageView.frame = UIScreen.main.bounds
    newImageView.contentMode = .scaleAspectFit
    newImageView.clipsToBounds = true
    newImageView.layer.borderColor = UIColor.gray.cgColor
    newImageView.layer.borderWidth = 3.0
    newImageView.frame = self.view.frame
    newImageView.backgroundColor = .black
    newImageView.isUserInteractionEnabled = true
    newImageView.image = imageView.image
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)
    scroller.isHidden = false
    scroller.addSubview(newImageView)
}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    scroller.isHidden = true
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}


func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return image //Can't return dynamically created newImageView?
}

1 Ответ

0 голосов
/ 30 декабря 2018

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

Apple объяснила многиераз, в видео WWDC и в примере кода, который вы можете скачать, как это делается.По сути, это просто представление прокрутки в представлении прокрутки.Внешний вид прокрутки позволяет осуществлять горизонтальную прокрутку.Внутренняя прокрутка содержит изображение и позволяет масштабировать.

Поэтому вместо добавления представления изображения добавьте представление прокрутки, содержащее представление изображения.

...