UICollectionview cell / imageview不会全屏显示

时间:2014-08-05 15:26:01

标签: ios uiimageview uicollectionview fullscreen

我试图让我的collectionview cell / uiimageview在点击图像时全屏显示。我使用动画并从didSelectItemAtIndexPath执行此操作并且一切正常并且看起来很棒,除了imageview根本不会改变大小,显然不会像我想要的那样全屏。我可以看到动画正在工作,但是它都发生在单元格预先存在的大小内,因此图像被裁剪。我希望它在点击时全屏显示,类似于在点击照片时它在FB中的工作方式。感谢任何帮助!这是我的代码......

@interface BaseViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UITextFieldDelegate> {

CGRect prevFrame;
}

@property (nonatomic) BOOL isFullScreen;
- (void)updateUI;
@end

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

ImageViewCell *selectedCell = (ImageViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
NSLog(@"didSelectItemAtIndexPath");

if (!self.isFullScreen) {
    [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
        NSLog(@"starting animiation!");
        prevFrame = selectedCell.imageView.frame;
        selectedCell.imageView.center = self.view.center;
        selectedCell.imageView.backgroundColor = [UIColor blackColor];
        //[selectedCell.imageView setFrame:[[UIScreen mainScreen] bounds]];
        [selectedCell.imageView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    }completion:^(BOOL finished){
        self.isFullScreen = YES;
    }];
    return;
} else {
    [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
        [selectedCell.imageView setFrame:prevFrame];
        selectedCell.imageView.backgroundColor = [UIColor colorWithRed:0.62 green:0.651 blue:0.686 alpha:1];
    }completion:^(BOOL finished){
        self.isFullScreen = NO;
    }];
    return;
}
}

1 个答案:

答案 0 :(得分:1)

您的视图单元格嵌入在视图层次结构中,大多数视图会剪切其子视图。获得一个全屏&#34;影响您需要(a)设置图像视图的父视图(单元格,collectionView,可能嵌入的任何内容等),而不是剪辑子视图(请参阅:&#34;剪辑到边界&#34;)或(b)将您的图像放在嵌入这些容器的视图中。

我不推荐(a)。试图设置容器以允许比容器更大的子视图(您的UIImageView)是一种反模式,打破了容器管理和包含其子项显示的想法。

对于(b),你想要做的是:

on Tap:
  imageView = << create a new UIImageView >>
  [self.view addSubview:imageView]
  set imageView.image = collectionCell.imageView.image
  set imageView.frame = << translated rect of the collectionCell.imageView.frame >>
  ... animate blowing your new imageView up to full-screen...

所以你基本上是在对待细胞&#34;点击细胞&#34;动作作为命令来创建一个新的UIImageView来显示图像,并将其设置为全屏动画。&#34;

由于新图像视图是VC根视图的直接子视图,因此可以全屏调整大小,而不会被父视图剪切。