Kev*_*n R 23 objective-c uikit ios
我正在尝试添加一个UIScrollView内部UICollectionViewCell.这个想法是你可以使用捏缩放UIScrollView(和它,它内部的图像),但滚动视图似乎不处理任何手势.我猜他们被这个人抓住了UICollectionView.
我给自己定的委托UIScrollView是UICollectionViewCell,但没有委托方法被调用.
编辑:我用代码制作了一个github repo(尽可能简化).虽然它只是几行代码,但我看不出我做错了什么.
编辑2:找到答案后,我添加了修复上述回购,希望其他人发现它也有帮助:)
mat*_*hat 25
您可能想尝试操作UIGestureRecognizers来执行此操作.在GalleryViewController:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
GalleryImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"galleryImageCell" forIndexPath:indexPath];
ImageContext *imageContext = [self.images objectAtIndex:indexPath.row];
cell.imageContext = imageContext;
[self.collectionView addGestureRecognizer:cell.scrollView.pinchGestureRecognizer];
[self.collectionView addGestureRecognizer:cell.scrollView.panGestureRecognizer];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
将手势识别器附加到视图定义了所表示的手势的范围,使其接收对该视图及其所有子视图进行经过测试的触摸.视图保留手势识别器.
因此,您还需要确保在单元格不再显示时将其删除.
- (void)collectionView:(UICollectionView *)collectionView
didEndDisplayingCell:(UICollectionViewCell *)cell
forItemAtIndexPath:(NSIndexPath *)indexPath {
// Get the cell instance and ...
[self.collectionView removeGestureRecognizer:cell.scrollView.pinchGestureRecognizer];
[self.collectionView removeGestureRecognizer:cell.scrollView.panGestureRecognizer];
}
Run Code Online (Sandbox Code Playgroud)
由于您没有修改UIGestureRecognizer的委托,只修改其范围,因此它仍将控制该单元格的滚动视图的缩放.
编辑:
我panGestureRecognizer根据OP的建议添加了上面的例子,说明需要它.缩放本身完全由处理pinchGestureRecognizer,但在大多数情况下,在将图像缩放到只有一部分可见的点之后,您需要平移以移动可见部分.也就是说,它是适当缩放体验的一部分.
mou*_*igo 24
我刚刚在iOS 9.3+上为SWIFT 3做了一个实现,我所做的就是:
1.将图像视图放在滚动视图中
2.将scrollview委托连接到collectionview单元类
3.在collectionview子类上实现以下代码
class FullScreenImageTextDetailCollectionViewCell: UICollectionViewCell, UIScrollViewDelegate {
@IBOutlet var scrollview: UIScrollView!
@IBOutlet weak var backgroundImageView: UIImageView!
override func awakeFromNib() {
self.scrollview.minimumZoomScale = 0.5
self.scrollview.maximumZoomScale = 3.5
self.scrollview.delegate = self
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return self.backgroundImageView
}
}
Run Code Online (Sandbox Code Playgroud)
在父集合视图控制器上添加或删除手势识别器是不必要的,就像一个魅力!
感谢前面的例子!
| 归档时间: |
|
| 查看次数: |
11029 次 |
| 最近记录: |