有没有办法捏和缩放以编程方式添加的图像?

时间:2018-12-30 17:31:37

标签: ios swift uiscrollview uiimageview

我试图弄清楚如何向imageView添加捏合/缩放功能, 但特别是我以编程方式添加到scrollView的那个。我可以在SO上找到一些很棒的示例,以使用带有viewForZooming的滚动视图来缩放图像,但是在那种情况下,我不得不返回被缩放和缩放的图像视图,如果我以编程方式返回图像视图则无法使用。

我的最终目标是拥有一个图像数组,用户可以在其中左右滚动查看所有图像,并可以放大它们,基本上就像它们在翻转photoStream一样。我找到了一个不错的教程来动态添加图像以在此处https://www.codementor.io/taiwoadedotun/ios-swift-implementing-photos-app-image-scrolling-with-scroll-views-bkbcmrgz5#comments-bkbcmrgz5滚动,但是由于图像视图是动态循环地添加的,因此我不清楚如何添加viewForZooming。

我创建了一个带有与帖子相关的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 :(得分:0)

  

我的最终目标是拥有一系列图像,用户可以在其中左右滚动以查看所有图像并可以放大它们

Apple在WWDC视频和您可以下载的示例代码中多次解释了如何完成此操作。基本上,它只是滚动视图中的滚动视图。外部滚动视图允许水平滚动。内部滚动视图包含图像视图并允许缩放。

因此,不要添加图像视图,而添加包含图像视图的滚动视图。