如何从表格视图中正确放大图像

时间:2013-10-25 14:14:28

标签: ios objective-c uitableview uiimage

我正在使用以下代码从表格视图中缩放/放大图像。我希望它扩大到全屏。当前的问题是,当它放大时,它只在表格单元格内放大(因此部分隐藏在下一个表格单元格下面),而不是整个视图。

    -(void)zoomPhotoMethod :(id) sender
{
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
    NSLog(@"Tag = %d", gesture.view.tag);

    userSubmittedImageView = (UIImageView *)gesture.view;

    if (!isFullScreen) {
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            //save previous frame
            prevFrame = userSubmittedImageView.frame;

            UIView *popupImageViewForTableCell = [[UIView alloc] initWithFrame: CGRectMake ( 0, 0, 320, 500)];

            [userSubmittedImageView setFrame:[popupImageViewForTableCell bounds]];


        }completion:^(BOOL finished){
            isFullScreen = TRUE;
        }];
        return;
    }
    else{
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            [userSubmittedImageView setFrame:prevFrame];
        }completion:^(BOOL finished){
            isFullScreen = FALSE;;
        }];
        return;
    }


}

更新代码:

   -(void)zoomPhotoMethod :(id) sender
{
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
    NSLog(@"Tag = %d", gesture.view.tag);

    userSubmittedImageView = (UIImageView *)gesture.view;

    if (!isFullScreen) {
        [UIView animateWithDuration:0.3 delay:0 options:0 animations:^{
            //save previous frame
            prevFrame = userSubmittedImageView.frame;


            newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];

            [self.view addSubview:newView];

            UIView *popupImageViewForTableCell = [[UIView alloc] initWithFrame: CGRectMake ( 0, 0, 320, 500)];

            [userSubmittedImageView setFrame:[popupImageViewForTableCell bounds]];

            [newView addSubview:userSubmittedImageView];

            [userSubmittedImageView setFrame:[newView bounds]];

        }completion:^(BOOL finished){
            isFullScreen = TRUE;
        }];
        return;
    }
    else{
        [UIView animateWithDuration:0.3 delay:0 options:0 animations:^{

            [userSubmittedImageView setFrame:prevFrame];


            [newView setFrame:prevFrame];

        }completion:^(BOOL finished){
            isFullScreen = FALSE;;
        }];
        return;
    }


}

2 个答案:

答案 0 :(得分:3)

发生的事情是你仍然是tableview单元格的子视图,因此如果没有被剪切,它将无法超出这些边界。

要做你想做的事,你将不得不:

  1. 在表格视图之外创建一个新的UIImageView(将其添加为tableview之外的子视图)。
  2. 将图像视图中的图像设置为与tableview单元格中相同的图像。
  3. 以与tableview单元格图像相同的大小和位置启动它。
  4. 将动画设置为您想要的位置。
  5. 当需要将其移除时,请将其移回原始的tableview单元格图像。
  6. 弃掉imageview。

答案 1 :(得分:2)

一种方法是使用图像副本并将其放在原始图像上方的单元格之外,并将第二张图像设置为全屏幕。

另一种方法是增加tableView rowHeight并重新加载该部分。