在 CollectionViewCell 内的 ScrollView 内缩放 UIImage [重复]

Posted

技术标签:

【中文标题】在 CollectionViewCell 内的 ScrollView 内缩放 UIImage [重复]【英文标题】:Zoomed UIImage inside ScrollView inside CollectionViewCell [duplicate] 【发布时间】:2016-02-21 14:23:50 【问题描述】:

我的目标是创建类似 Apple Photos 应用程序的应用程序 - 显示照片、允许缩放、水平滚动等... 我目前被困在允许在collectionViewCell 中放大照片。

我做了什么:我有collectionViewscrollView 里面collectionViewCell。这就是我在CollectionViewController 中在cellForItemAtIndexPath 中创建UIImageView 的方式:

    let imageView: UIImageView!
    let someImage = UIImage(named: "someImage")
    imageView = UIImageView(image: someImage)
    imageView.frame = CGRect(origin: CGPointMake(0.0, 0.0), size:someImage.size)

    cell.scrollView.addSubview(imageView)
    cell.scrollView.contentSize = someImage.size

    let scrollViewFrame = cell.scrollView.frame
    let scaleWidth = scrollViewFrame.size.width / cell.scrollView.contentSize.width
    let scaleHeight = scrollViewFrame.size.height / cell.scrollView.contentSize.height
    let minScale = min(scaleWidth, scaleHeight);
    cell.scrollView.minimumZoomScale = minScale;

    cell.scrollView.maximumZoomScale = 1.0
    cell.scrollView.zoomScale = minScale;

    centerScrollViewContents(cell.scrollView, imageView: imageView)

(我在Ray Wenderlich找到了这段代码)

接下来我需要添加此代码,以便缩放正常工作:

func viewForZoomingInScrollView(scrollView: UIScrollView!) -> UIView! 
    return imageView


func scrollViewDidZoom(scrollView: UIScrollView!) 
    let boundsSize = scrollView.bounds.size
    var contentsFrame = imageView.frame

    if contentsFrame.size.width < boundsSize.width 
        contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
     else 
        contentsFrame.origin.x = 0.0
    

    if contentsFrame.size.height < boundsSize.height 
        contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
     else 
        contentsFrame.origin.y = 0.0
    

    imageView.frame = contentsFrame

问题是,我的IBAOutlet for scrollViewCollectionViewCell 内部,而不是CollectionViewController,所以这两个函数必须从CollectionViewCell 调用,但我不知道如何访问@987654336 @ 代表viewForZoomingInScrollView。也许我的整个方法都是错误的?

【问题讨论】:

【参考方案1】:

使用 xib 创建 UICollectionViewCell 子类

Subclassing UICollectionViewCell and initialising from xib

或者没有xib

http://randexdev.com/2014/08/uicollectionviewcell/

然后将 scrollViewdelegate 设置为 collectionViewCell 子类

将 UIScrollViewDelegate 代码添加到单元格

您可以从单元格属性访问 imageView

【讨论】:

以上是关于在 CollectionViewCell 内的 ScrollView 内缩放 UIImage [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 collectionviewcell 内的进度条创建 IBOutlet?

约束 UIView 内的标签,该标签位于可扩展 collectionViewCell 内

按下 CollectionViewCell 内的按钮后如何呈现 ViewController

uiCollectionViewCell 内的 Uitableview

UICollectionViewCell 内的 UIImageView 中的角半径

手势识别器在其他 UICollectionViewCell 内的 UICollectionView 上不起作用