当用户在Swift中点击我的UIImage时,如何在全屏显示图像?

时间:2016-03-16 09:26:40

标签: ios swift uiimage

我正在我的应用中显示一张照片,而我正在使用UIImage。到目前为止,这就是我这样做的方式:

func getDataFromUrl(url:NSURL, completion: ((data: NSData?, response: NSURLResponse?, error: NSError? ) -> Void)) {
    NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
        completion(data: data, response: response, error: error)
        }.resume()
}

func downloadImage(url: NSURL){
    getDataFromUrl(url) { (data, response, error)  in
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            guard let data = data where error == nil else { return }
            print("Download Finished")
            self.requestPhoto.image = UIImage(data: data)
        }
    }
}

然后在viewDidLoad()我正在做:

if let checkedUrl = NSURL(string: photo) {
        requestPhoto.contentMode = .ScaleAspectFit
        downloadImage(checkedUrl)
    }

这使得UIImage充满了我的照片,但它不是可点击的,它是原始组件的大小。当用户点击UIImage组件时,有没有办法添加某种监听器或者全屏显示照片的东西?

2 个答案:

答案 0 :(得分:2)

您需要在UITapGestureRecognizer图片视图中添加requestPhoto。像这样:

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("tapHandler"))

self.requestPhoto.addGestureRecognizer(tapGestureRecognizer)
self.requestPhoto.userInteractionEnabled = true

最后一行是必需的,因为UIImageView默认情况下处于关闭状态,因此触摸会被取消。

然后在同一个班级:

func tapHandler(sender: UITapGestureRecognizer) {
    if sender.state == .Ended {
         // change the size of the image view so that it fills the whole screen
    }
}

如果视图是全屏的,那么整个事情也可以从标记中获益,这样当用户点击全屏图像时,您可以反转该过程。

与往常一样,您可以在docs中阅读更多内容。

答案 1 :(得分:2)

如何将缩略图照片放大到iOS上的全屏照片视图?

我通过创建具有相同图像的新UIImageView对象解决了这个问题,并将其框架设置为缩略图图像:

let fullscreenPhoto = UIImageView(frame: thumbnailImage.frame)

然后将图像作为子图层添加到主窗口中:

UIApplication.sharedApplication().windows.first!.addSubview(fullscreenPhoto)

使用块进行动画调整:

let windowFrame = UIApplication.sharedApplication().windows.first!.frame
UIView.animateWithDuration(0.4, delay: 0.0, options: .CurveEaseInOut, animations: {

            fullscreenPhoto.frame = windowFrame
            fullscreenPhoto.alpha = 1
            fullscreenPhoto.layoutSubviews()

            }, completion: { _ in
        })

您可以在此处找到现成的解决方案:https://github.com/lukszar/SLImageView

提供了用于显示和隐藏全屏的手势识别器。 你只需要在故事板中将你的UIImageView设置为SLImageView类,所有魔法就完成了。