【问题标题】:Tap imageView to view Fullscreen image点击 imageView 以查看全屏图像
【发布时间】:2014-11-07 14:43:38
【问题描述】:

我的详细视图中有一个 uiimageview,我想制作它,以便当我点击图像时,它会全屏打开图像。但是,我下面的代码似乎不起作用。知道我做错了什么吗?

FullViewController.h

@interface FullArticleViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIGestureRecognizerDelegate>


    {
        IBOutlet UITapGestureRecognizer *tap;
        IBOutlet UIScrollView *scroller;
        IBOutlet UILabel *firstnameLabel;
        IBOutlet UILabel *bodyLabel;
        IBOutlet UILabel *descriptionLabel;


        BOOL isFullScreen;
        CGRect prevFrame;        
    }

FullViewController.m

   - (void)viewDidLoad
    {

        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.

           if ([[articleDetail objectForKey:@"ytID"] isEqualToString:@"none"]) {

           featureImage.userInteractionEnabled = YES;

           NSString *imageUrl = [NSString stringWithFormat:@"image/%@",cellImageLink];

           [self.featureImage sd_setImageWithURL:[NSURL URLWithString:imageUrl]];

           [scroller setScrollEnabled:YES];

           featureImage.userInteractionEnabled = YES;

           [scroller bringSubviewToFront:featureImage];

        UITapGestureRecognizer *tapgesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen)];
        [tapgesture setNumberOfTapsRequired:1];

        [featureImage addGestureRecognizer:tap];

    }

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
    {
        BOOL shouldReceiveTouch = YES;

        if (gestureRecognizer == tap) {
            shouldReceiveTouch = (touch.view == featureImage);
        }
        return shouldReceiveTouch;
    }

    -(void)imgToFullScreen{
        if (!isFullScreen) {
            [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
                //save previous frame
                prevFrame = featureImage.frame;
                [featureImage setFrame:[[UIScreen mainScreen] bounds]];
            }completion:^(BOOL finished){
                isFullScreen = true;
            }];
            return;
        } else {
            [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
                [featureImage setFrame:prevFrame];
            }completion:^(BOOL finished){
                isFullScreen = false;
            }];
            return;
        }
    }

编辑:查看上面更新的代码和下面的层次结构

【问题讨论】:

  • @rdelmar 是的,我做到了。
  • 这段代码你得到了什么结果?它什么都不做吗?
  • @rdelmar 正确;它什么也不做。
  • 从场景列表中发布视图层次结构的图像可能会有所帮助。
  • 所以,实际上,您的图像视图位于层次结构的底部,而不是顶部(视觉上,我说的是——列表中最底部的视图是 z 顺序中最顶部的视图)。话虽这么说,把它带到前面应该是有效的。您确定您的滚动条 IBOutlet 已设置吗?此外,您可以尝试将图像视图拖到列表底部以更改其 z 顺序。

标签: ios objective-c image uiimageview


【解决方案1】:

在你的 viewDidLoad: 方法中试试这个:

[featureImage setUserInteractionEnables:YES];

UITapGestureRecognizer *tapgesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen)];
[tapgesture setNumberOfTapsRequired:1];
[featureImage addGestureRecognizer:tapgesture];

【讨论】:

  • 这一半有效;哈哈。当我将此代码添加到 viewDidLoad 并运行应用程序时,点击 imageview 会使图像全屏显示,但它会在所有视图文本后面全屏显示(因此看起来它只是将点击的图像设置为背景)。另外:图像是水平的,并且垂直拉伸。我怎样才能使图像在所有内容之上全屏显示?
  • 在全屏动画之前使用[self.view bringSubviewToFront:featureImage];
  • 很明显你的图像视图在你的控制器视图中有错误的层次结构。你需要把它带到顶部。查看一些编码基础指南。
  • 这是令人沮丧的部分;我的图像视图位于层次结构的顶部(显然嵌入在视图中)......
  • 这可能不是最简洁的方式,但您可以在全屏时将图像视图添加到应用程序委托窗口,并在返回时返回到您的控制器视图。
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 2016-03-17
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多