【问题标题】:How do I expand image to full view when being tapped in a UICollectionView?在 UICollectionView 中被点击时如何将图像扩展为完整视图?
【发布时间】:2015-10-07 06:30:03
【问题描述】:

在我的项目中,我使用UICollectionView 来显示图像,我还在UICollectionViewCell 中使用UIImageView。 我想要的只是当我点击一个应该展开并全屏显示的图像时。 为此,我创建了一个新视图,在其上使用 UIImageView,并在 UICollectionViewCells 上应用 TapGesture。 展开的图像在下一个视图中打开,但未显示在我给它的框架中。 并且当我点击它从收藏视图中删除的任何图片时。请告诉我如何重新加载UICollectionViewCells 请建议我如何将图像放在规定的框架上。 我正在分享我的代码

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    imgview = (UIImageView *)[cell viewWithTag:100];
    imgview = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,160, 160)];

    imgview.image = [UIImage imageNamed:[imagearray objectAtIndex:indexPath.row]];
    //cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:[imagearray objectAtIndex:indexPath.row]]];
    [cell.contentView addSubview:imgview];

    UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(expandImage:)];
    tapped.numberOfTapsRequired = 1;
    [imgview setUserInteractionEnabled:YES];
    imgview.tag = indexPath.row;
    [imgview addGestureRecognizer:tapped];

    [cell.contentView addSubview:imgview];

    return cell;
}

-(void)expandImage:(UITapGestureRecognizer*)recogniser
{
    UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 50, self.view.frame.size.width , self.view.frame.size.height)];
    view1.backgroundColor = [UIColor greenColor];
    [self.view addSubview:view1];

    UIButton *closeButton = [[UIButton alloc]initWithFrame:CGRectMake(310, 10, 50, 40)];
    [closeButton setTitle:@"Close" forState:UIControlStateNormal];
    [closeButton addTarget:self action:@selector(Closetab) forControlEvents:UIControlEventTouchUpInside];
    [view1 addSubview:closeButton];

    UIImageView *photoView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 70, self.view.frame.size.width, self.view.frame.size.height-200)];
    [photoView setBackgroundColor:[UIColor blueColor]];
    [view1 addSubview:photoView];
    photoView.accessibilityIdentifier = @"nature2.png";

    UIImageView *photoView1 = (UIImageView*)recogniser.view;
    photoView1.accessibilityIdentifier = @"nature2.png";

    //photoView.clipsToBounds = YES;

    // photoView.accessibilityIdentifier = @"apple1.png";

    photoView1.contentMode =  UIViewContentModeScaleAspectFill;

    //photoView1.clipsToBounds = YES;
    [view1 addSubview:photoView1];  
}

【问题讨论】:

  • 我没有足够的声望(15)分数来添加快照把我的问题投票给我然后我会添加它的快照
  • imageView出现了吗?框架错了吗?
  • 现在添加一些快照。现在你有声望了。
  • imageview 框架设置不正确,现在我设置它并且工作正常。但问题是当我点击它从收藏视图中删除的任何图片时。请告诉我如何重新加载 uicollectionview 单元格
  • @yankitPatel 我现在添加我的截图检查它

标签: ios objective-c uiimageview uicollectionview uicollectionviewcell


【解决方案1】:

所以最好在窗口中添加视图。所以它是全屏显示。使用以下代码。

UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 50, self.view.frame.size.width , self.view.frame.size.height)];
    view1.backgroundColor = [UIColor greenColor];
    [self.view.window addSubview:view1];

【讨论】:

  • 能否添加swift版
【解决方案2】:

实现此目的的更简单方法是推送到显示全屏图片的新视图,而不是将其添加为子视图。

您还可以自定义导航控制器的过渡动画以满足您的需求。

【讨论】:

    【解决方案3】:

    好吧,不要把任何事情视为理所当然,因为我可以肯定一件事,就是看着那段代码让我感到困惑。但这是我的看法,以及出了什么问题:

        UIImageView *photoView1 = (UIImageView*)recogniser.view;
        [view1 addSubview:photoView1]; 
    

    通过这 2 行,您可以从单元格中取出视图并将其放入这个新视图 1。 所以只需分配新的 UIImageVIew 并设置它的图像就可以解决它。 还有一些建议:

        imgview = (UIImageView *)[cell viewWithTag:100];
        imgview = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,160, 160)];
    

    这里的第一行代码没有做任何事情。您设置对象,然后再次设置该对象。 接下来是不要在 cellForItemAtIndexPath 中添加子视图而不删除之前添加的内容。出列单元格时,您会一遍又一遍地使用相同的单元格,因此您将通过将视图堆叠在一起来造成内存泄漏。您甚至可以通过使用自己的 UIImageView 创建自定义单元格来省略所有添加内容。接下来就不用使用手势识别了,CollectionView 有这个委托:

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

    您可以用它替换您的 expandImage 方法,在里面您只需从 imagearray 获取您的图像。 最后还有这个漂亮的库可供您使用,MHFacebookImageViewer

    【讨论】:

      【解决方案4】:

      navigationController.view 上添加imageview

      UIImageView *imgView =[[UIImageView alloc]initWithFrame:self.view.bounds];
      [self.navigationController.view addSubview:imgView];
      

      【讨论】:

        【解决方案5】:

        我通过这段代码完成了上述操作 首先添加了点击手势 然后应用以下代码

        -(void)expandImage:(UITapGestureRecognizer*)recogniser
        {
        
            view1.hidden = NO;
        
            UIImageView *photoView1 = (UIImageView*)recogniser.view;
            photoView1.frame = CGRectMake(0, 0, self.view.frame.size.width, 510);
            photoView1.accessibilityIdentifier = @"nature2.png";
        
            //photoView.clipsToBounds = YES;
        
            // photoView.accessibilityIdentifier = @"apple1.png";
        
            photoView1.contentMode =  UIViewContentModeScaleAspectFill;
        
            photoView1.clipsToBounds = YES;
        
            [view1 addSubview:photoView1];
            }
        

        【讨论】:

          猜你喜欢
          • 2015-11-03
          • 2021-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 2013-10-18
          相关资源
          最近更新 更多