如何在UICollectionView中以模态方式呈现UIImageview

时间:2013-08-13 09:52:39

标签: ios uiimageview uicollectionview

我目前有UICollectionView,其中包含图片网格。我想要做的是,当我点击任何特定的图像时,它应该打开一个图像视图,我可以平移它。


问题

  1. 图片视图无法显示图片。
  2. 如果我为图像视图启用平移,则整个网格视图将移动。
  3. 如何避免这些问题?

    这就是我的尝试:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.view.backgroundColor=[UIColor whiteColor];
        [self.collectionView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellWithReuseIdentifier:@"CellID"];
    
    
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    
    -(int)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
    {
    
        return 30;
    }
    
    -(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        Cell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"CellID" forIndexPath:indexPath];
        cell.backgroundColor=[UIColor whiteColor];
        UIImageView *imgView=(UIImageView *)[cell viewWithTag:1];
        imgView.image=[UIImage imageNamed:@"57.png"];
        return cell;
    }
    
    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
    {
        UIImageView *previewImage=[[UIImageView alloc]init];
        UIScrollView *imageScroll=[[UIScrollView alloc]init];
        imageScroll.clipsToBounds=YES;
        imageScroll.contentSize=previewImage.bounds.size;
        UIViewController *imageController=[[UIViewController alloc]init];
        imageController.view.backgroundColor=[UIColor whiteColor];
        [imageController.view addSubview:imageScroll];
        imageController.modalPresentationStyle=UIModalTransitionStyleCrossDissolve;
        imageController.modalPresentationStyle = UIModalPresentationFormSheet;
        [self presentViewController:imageController animated:YES completion:^{
    
        }];
    
    }
    

    任何指针?

2 个答案:

答案 0 :(得分:1)

有几件事:

您可以将UIScrollView对象imageScroll的contentSize设置为UIImageView对象previewImage的大小。因此,您应该设置previewImage的框架,以便imageScroll知道其contentSize,您应该设置imageScroll的框架以确保它会滚动(请记住UIScrollView的框架必须小于其contentSize)。这样的东西会起作用(你应该把它改成你想要的):

UIImageView *previewImage=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
UIScrollView *imageScroll=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];

您也没有将previewImage作为子视图添加到imageScroll或设置其图像。

previewImage.image = //set image;
[imageScroll addSubview:previewImage];

正确设置UIScrollView后,用户可以轻松平移图像。

答案 1 :(得分:1)

你有效地尝试做的是构建一个viewcontroller hiearchy。你不能尝试这样做。您需要将它作为弹出控制器呈现,最好让UIImageView显示。但是你不能移动它。所以你的方法不会起作用。

一个想法可能是在UICollectionView上禁用userinteraction,并在UICollectionView上显示UIImageView作为子视图,然后在管理UICollectionView的同一个控制器中进行控制器平移。