如何在 ImageView 已经全屏时再次点击以缩小?

Posted

技术标签:

【中文标题】如何在 ImageView 已经全屏时再次点击以缩小?【英文标题】:How to make tap again ImageView to zoom out when it is already fullscreen? 【发布时间】:2013-10-28 17:34:31 【问题描述】:

我在单页应用程序上有一个图像视图,我将其设置为全屏大小,点击它就可以了。但我也希望它在全屏大小时点击它时缩小到原始大小。怎么做?现在,点击它将使其全屏显示,然后我只能停止运行。这是我的代码:

- (void)Enlarge:(id)sender
    [ImageView setFrame:CGRectMake(0, 20, (460/1.5), 480-20)]; //enlarge to fullscreen but exclude the status bar.


- (void)viewDidLoad

    [super viewDidLoad];
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(Enlarge:)];
    tapGesture.numberOfTapsRequired = 1;
    tapGesture.cancelsTouchesInView = YES;
    [ImageView setUserInteractionEnabled:YES];
    [ImageView addGestureRecognizer:tapGesture];
    [tapGesture release];

我的第二个问题是我有两个由这个视图控制器控制的故事板,一个用于 3.5 英寸屏幕,另一个用于 4 英寸屏幕。我希望我的放大图适合两种屏幕尺寸,以下更改可以解决问题吗?因为我现在没有要测试的 iPhone5。

- (void)Enlarge:(id)sender
    CGSize iosDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    if (iOSDeviceScreenSize.height == 480)
        [ImageView setFrame:CGRectMake(0, 20, (460/1.5), 480-20)];
    
    if (iOSDeviceScreenSize.height == 568)
        [ImageView setFrame:CGRectMake(0, 20, (548/1.775), 568-20)];
    


非常感谢!

【问题讨论】:

【参考方案1】:

添加一个 BOOL 变量来跟踪它是否是全屏。

在 .h 中添加属性

@property (nonatomic, assign) BOOL isFullScreen;

@property (nonatomic, assign) CGRect originalRect;

在 viewDidLoad 中,添加这些行,

self.isFullScreen = NO;
self.originalRect = CGRectMake(0,0,153,230);//replace this by the zoomed out rect size that you want

在你的放大图中:

- (void)Enlarge:(id)sender

if(!self.isFullScreen)
[ImageView setFrame:CGRectMake(0, 20, (460/1.5), 480-20)]; //enlarge to fullscreen but exclude the status bar.
else 
[ImageView setFrame:originalFrame];//

self.isFullScreen = !self.isFullScreen;

关于第二个问题,是的,应该可以。

【讨论】:

我有 2 个错误:=( 1. originalFrame 未声明。2. 在“视图控制器 *”类型的对象上找不到属性“isFullScreen”。我实际上不明白这一行: self.isFullScreen = !self.isFullScreen; self.isFullScreen = !self.isFullScreen 有效地将 self.isFullScreen 的(布尔)值的相反值存储到同一属性中,即如果 self.isFullScreen 为 YES,则该行会将其设置为 NO。 您需要添加属性定义并在某处定义 originalFrame,或者通过将 originalFrame 替换为 CGRectMake() 来硬编码;

以上是关于如何在 ImageView 已经全屏时再次点击以缩小?的主要内容,如果未能解决你的问题,请参考以下文章

MpMovieplayerController 点击手势识别器在全屏时不会触发

iOS编程如何在用户点击ImageView时全屏显示图像

MPMoviePlayerController 在视图展开到全屏时释放

Pyglet:全屏时如何更改分辨率?

不全屏时如何获取全屏(最小ui)视图的窗口大小?

窗口默认全屏时如何短时间显示通知栏?