UICollectionViewCell中带有Swift的UIScrollView

UICollectionViewCell中带有Swift的UIScrollView,swift,uiscrollview,uicollectionviewcell,pinchzoom,sdwebimage,Swift,Uiscrollview,Uicollectionviewcell,Pinchzoom,Sdwebimage,我是IOS新手。我尝试创建查看图像应用程序,显示全屏大小的图像可以缩放,当用户缩小小于全屏大小的图像时,图像返回全屏大小,我的想法是使用UICollectionView设置分页启用,滚动方向水平。所以我的流程布局是这样的 var screenSize: CGRect! override func viewDidLoad() { super.viewDidLoad() screenSize = UIScreen.mainScreen().bounds let lay

我是IOS新手。我尝试创建查看图像应用程序,显示全屏大小的图像可以缩放,当用户缩小小于全屏大小的图像时,图像返回全屏大小,我的想法是使用UICollectionView设置分页启用,滚动方向水平。所以我的流程布局是这样的

var screenSize: CGRect!

 override func viewDidLoad() {
    super.viewDidLoad()

    screenSize = UIScreen.mainScreen().bounds

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: screenSize.width, height: screenSize.height)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

    self.collectionView!.collectionViewLayout = layout
    self.view.addSubview(collectionView!)
import UIKit

class MyCollectionCell: UICollectionViewCell, UIScrollViewDelegate{

@IBOutlet weak var scrollCell: UIScrollView!

@IBOutlet weak var imgTest: UIImageView! 

}
var imageName:[String] = ["audi.png", "benz.png", "flok.png", "audi.png", "benz.png", "flok.png", "audi.png", "benz.png", "flok.png"]
我的CollectionViewCell标识符名称“Cell”我在其中拖动ScrollView并在该ScrollView中拖动图像

我在CollectionViewCell类中输出这两个项,如下所示

var screenSize: CGRect!

 override func viewDidLoad() {
    super.viewDidLoad()

    screenSize = UIScreen.mainScreen().bounds

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: screenSize.width, height: screenSize.height)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

    self.collectionView!.collectionViewLayout = layout
    self.view.addSubview(collectionView!)
import UIKit

class MyCollectionCell: UICollectionViewCell, UIScrollViewDelegate{

@IBOutlet weak var scrollCell: UIScrollView!

@IBOutlet weak var imgTest: UIImageView! 

}
var imageName:[String] = ["audi.png", "benz.png", "flok.png", "audi.png", "benz.png", "flok.png", "audi.png", "benz.png", "flok.png"]
CollectionViewController的下一步是设置我的虚拟图像,如下所示

var screenSize: CGRect!

 override func viewDidLoad() {
    super.viewDidLoad()

    screenSize = UIScreen.mainScreen().bounds

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: screenSize.width, height: screenSize.height)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

    self.collectionView!.collectionViewLayout = layout
    self.view.addSubview(collectionView!)
import UIKit

class MyCollectionCell: UICollectionViewCell, UIScrollViewDelegate{

@IBOutlet weak var scrollCell: UIScrollView!

@IBOutlet weak var imgTest: UIImageView! 

}
var imageName:[String] = ["audi.png", "benz.png", "flok.png", "audi.png", "benz.png", "flok.png", "audi.png", "benz.png", "flok.png"]
然后转到cellForItemAtIndexPath

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! MyCollectionCell

    cell.layer.borderWidth = 0
    cell.frame.size.width = screenSize.width
    cell.frame.size.height = screenSize.height
    // set cell size become fullscreen

    cell.imgTest.image = UIImage(named: imageName[indexPath.row])
    cell.imgTest.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:cell.imgTest.image!.size)

    //call my dummy image to cell

    cell.scrollCell.addSubview(cell.imgTest)
    cell.scrollCell.contentSize = cell.imgTest.image!.size

    let scaleHeight = cell.scrollCell.frame.size.height / cell.scrollCell.contentSize.height
    let scaleWidth = cell.scrollCell.frame.size.width / cell.scrollCell.contentSize.width
    let minScale = min(scaleWidth, scaleHeight)
    cell.scrollCell.minimumZoomScale = minScale
    cell.scrollCell.maximumZoomScale = 1.0
    cell.scrollCell.zoomScale = minScale

    var doubleTapRecognizer = UITapGestureRecognizer(target: self, action: "scrollviewDoubleTapped")
    doubleTapRecognizer.numberOfTapsRequired = 2
    doubleTapRecognizer.numberOfTapsRequired = 1
    cell.scrollCell.addGestureRecognizer(doubleTapRecognizer)
我运行这个项目,问题是

  • 滚动大小不等于我的图像大小,但超过
  • 我的图像无法缩放(我已选中“已启用用户交互”)
  • 我试着用捏手势来解决这个问题,但我不知道如何设置minimumzoomscale,放大时图像无法滚动
  • 通过这段代码,我尝试将json中的图像与SDWebImage一起使用,我将cellForItemAtIndexPath中的代码从调用伪图像更改为

    cell.imgTest.sd_setImageWithURL(NSURL(字符串:dataArray[indexPath.row]),占位符图像:UIImage(名为:“load.png”))

  • 但这样线程1:EXC_BAD_指令(代码=EXC_1386_INVOP,子代码=0x0)

  • 我从这里走到哪里,有人能用swift引导我吗

  • 使用scrollview代替集合视图,更简单、更灵活。查看此链接非常好的教程。。您可以合并滚动页面和滚动缩放

    你找到解决办法了吗?我也被困在那里了…:(检查单元格缩放)