Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UICollectionViewCell内的UIScrollView滚动区域_Objective C_Ios7_Uiscrollview_Uicollectionview - Fatal编程技术网

Objective c UICollectionViewCell内的UIScrollView滚动区域

Objective c UICollectionViewCell内的UIScrollView滚动区域,objective-c,ios7,uiscrollview,uicollectionview,Objective C,Ios7,Uiscrollview,Uicollectionview,我有以下UICollectionView控制器 我的问题是当我放大图像时,我能够“滚动”过图像边界。这几乎与这个问题完全相似,但答案并没有解决我的问题 据我所知,我相信这是因为scrollView的内容大小没有设置为图像的大小。但是,我不确定在我的子类UICollectionViewCell中在哪里设置类似于self.scrollView.contentSize=self.imageView.image.size的内容 默认视图 缩放并移动到图像边界之外 我的预期行为是,如果用户试图滚动到

我有以下UICollectionView控制器

我的问题是当我放大图像时,我能够“滚动”过图像边界。这几乎与这个问题完全相似,但答案并没有解决我的问题

据我所知,我相信这是因为scrollView的内容大小没有设置为图像的大小。但是,我不确定在我的子类UICollectionViewCell中在哪里设置类似于
self.scrollView.contentSize=self.imageView.image.size的内容

默认视图

缩放并移动到图像边界之外

我的预期行为是,如果用户试图滚动到图像之外,图像会有点反弹

迄今为止的有关守则

Imgur细胞亚类

- (void)awakeFromNib {
    self.scrollView.minimumZoomScale = 1;
    self.scrollView.maximumZoomScale = 3.0;
    self.scrollView.delegate = self;
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}
视图控制器

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setStyle];
    ImgurCellDetail *cell = (ImgurCellDetail *)[self.collectionView cellForItemAtIndexPath:self.indexPath];
    cell.scrollView.minimumZoomScale = cell.scrollView.frame.size.width / cell.imageView.frame.size.width;
    cell.scrollView.maximumZoomScale = 3.0;
    cell.scrollView.contentSize = cell.imageView.image.size;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self loadSelectedImage];
}

- (void)loadSelectedImage
{
    [self.collectionView scrollToItemAtIndexPath:self.indexPath
                                atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
                                        animated:NO];

}

- (ImgurCellDetail *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    ImgurCellDetail *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    [self resetImage:cell];
    cell.imageView.image = [UIImage imageWithContentsOfFile:self.imageArray[indexPath.row]];
    [self.collectionView addGestureRecognizer:cell.scrollView.pinchGestureRecognizer];
    [self.collectionView addGestureRecognizer:cell.scrollView.panGestureRecognizer];
    return cell;
}

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
 sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    // Need this for 3.5"
    return self.collectionView.frame.size;
}

- (void)collectionView:(UICollectionView *)collectionView
  didEndDisplayingCell:(ImgurCellDetail *)cell
    forItemAtIndexPath:(NSIndexPath *)indexPath {

    [self.collectionView removeGestureRecognizer:cell.scrollView.pinchGestureRecognizer];
    [self.collectionView removeGestureRecognizer:cell.scrollView.panGestureRecognizer];
}

- (void)resetImage:(ImgurCellDetail *)cell {
    //reset zoomScale back to 1 so that contentSize can be modified correctly
    cell.scrollView.zoomScale = 1;
}

我可能应该提到,当图像视图设置为aspect fill时,我没有任何问题,但正如您所看到的,它当前设置为aspect fit,这就是我的问题开始的地方。

我认为您必须首先设置滚动视图的
contentSize
,以匹配图像的缩放大小(第一个屏幕截图中显示的大小)而不是图片的实际大小

// Not this
//cell.scrollView.contentSize = cell.imageView.image.size;

// But this
CGSize originalSize = cell.imageView.image.size;
CGSize sizeToFit = cell.scrollView.bounds.size;
CGFloat scaleDownFactor = MIN(sizeToFit.width / originalSize.width,
                              sizeToFit.height / originalSize.height);
CGSize scaledDownSize = CGSizeMake(nearbyintf(originalSize.width * scaleDownFactor),
                                   nearbyintf(originalSize.height * scaleDownFactor));
cell.scrollView.contentSize = scaledDownSize;

// Also use scaledDownSize for the viewForZooming
从这里开始,您可以像链接的答案那样不断调整内容插入


最后,在
viewDidLoad

中,滚动视图的实际大小可能尚未完全调整。我设法解决了自己的错误。我采用了这里找到的方法:在我的解决方案中

我必须做的改变是:

  • 以编程方式生成图像,而不是使用故事板
  • 在UICollectionView子类的awakeInNib方法中添加scrollview最小/最大缩放初始代码
  • 在my
    cellForRowIndexPath中生成图像

我想差不多了。

把你的完整代码发给我@mrsamkitjain@gmail.com…或者在某个位置上传…我会帮助uI自己解决问题。谢谢!;)如果你自己解决了问题,那你为什么要增加奖金?o0I在赏金后修复了它;(你好,Super9,你能分享一下这个解决方案的代码吗?我也有同样的问题。谢谢