我在Swift中创建了一个UICollectionView,其中包含从API中拍摄的照片:https://jsonplaceholder.typicode.com/photos
我已经创建了一个窗口,我的图像可以设置为全屏在这里:
extension ViewController: UICollectionViewDataSource, UICollectionViewDelegate{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return posts.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCollectionViewCell
let url = URL(string: "https://via.placeholder.com/600/\(posts[indexPath.row].thumbnailUrl)")
cell.myImageView.downaloadImage(from: url!)
cell.myImageView.layer.cornerRadius = 25
cell.myLabelName.text = posts[indexPath.row].title
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
let alert = UIAlertController(title: "FullScreen", message: "Are you sure you want to see the image fullscreen?", preferredStyle: .alert)
let actionyes = UIAlertAction(title: "Yes", style: .default) { action in
cell?.frame = UIScreen.main.bounds
cell?.backgroundColor = .magenta
cell?.contentMode = .scaleAspectFit
//de schimbat imagine thumbnailURL cu url
cell?.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(self.dismissFullscreenImage))
cell?.addGestureRecognizer(tap)
self.view.addSubview((cell)!)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = true
}
let actionno = UIAlertAction(title: "No", style: .default) { action in
}
alert.addAction(actionno)
alert.addAction(actionyes)
present(alert, animated: true)
}
@objc func dismissFullscreenImage(sender: UITapGestureRecognizer) {
let alert2 = UIAlertController(title: "Go Back", message: "Are you sure you want to go back?", preferredStyle: .alert)
let actionyes2 = UIAlertAction(title: "Yes", style: .default) { action in
self.navigationController?.isNavigationBarHidden = false
self.tabBarController?.tabBar.isHidden = false
sender.view?.removeFromSuperview()
}
let actionno2 = UIAlertAction(title: "No", style: .default) { action in
}
alert2.addAction(actionno2)
alert2.addAction(actionyes2)
self.present(alert2, animated: true)
}
}
我试着放大全屏的图像,但我不知道从哪里开始。我的结构是这样的:
import Foundation
struct Post : Codable
{
let albumId : Int
let id : Int
let title : String
let url : String
let thumbnailUrl : String
}
另外,当我退出全屏时,我的图像消失了,我不知道如何保持它。我认为问题出在这里:
sender.view?.removeFromSuperview()
我可以在代码中缩放图片吗?或者我还需要其他东西吗?我见过很多人使用滚动视图,但我的图片是在集合视图单元格中,如下所示:
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet var myImageView: UIImageView!
@IBOutlet var myLabelName: UILabel!
}
2条答案
按热度按时间4sup72z81#
是的,调用
sender.view?.removeFromSuperview()
是不好的,因为您正在从集合视图中移除集合视图单元格。您不能这样做。当您想要全屏显示图像时,不应对集合视图单元格执行任何操作。相反,请使用单元格的图像视图中的图像创建一个新的UIImageView,并全屏显示该新图像视图。当您想要关闭它时,只需移除该图像视图。这将使原始集合视图单元格及其图像视图保持不变,并且在缩放后仍然可见。
如果创建一个与单元格的图像视图大小和位置相同的新图像视图,然后将新图像视图设置为全屏动画,效果也会很好。
如果您希望允许用户放大图像,可以将新的图像视图放入UIScrollView中,但这超出了您最初问题的范围。
hsvhsicv2#
您可以在单元格中使用ImageScrollView代替ImageView。下面是相同的链接。
https://github.com/huynguyencong/ImageScrollView