我试图让我的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;
}
}
答案 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根视图的直接子视图,因此可以全屏调整大小,而不会被父视图剪切。