如何用动画取消隐藏 UIView

Posted

技术标签:

【中文标题】如何用动画取消隐藏 UIView【英文标题】:How to Unhide UIView with animations 【发布时间】:2017-09-14 11:28:09 【问题描述】:

我正在尝试用动画取消隐藏 UIView,但它不适用于 iphone 模拟器 5。在除 5 和 5s 之外的所有其他模拟器上取消隐藏后,视图看起来很好。

可能是什么原因。无法检测到问题。有什么帮助吗?

 /*To unhide*/
    self.view4.hidden=NO;
    
    [UIView animateWithDuration:0.5 animations:^
        self.view4.frame =  CGRectMake(2, 70, 70, 300);
        self.view4.alpha = 1.0f;
     completion:^(BOOL finished) 
    ];
    
    //for showing view3
    self.view3.hidden=NO;
    
    [UIView animateWithDuration:0.5 animations:^
        [self.view3 setFrame:CGRectMake(0, 303, 320, 95)];
        self.view3.alpha = 1.0f;
     completion:^(BOOL finished) 
    ];

在按钮上单击 view3 没有出现 :(。view4 看起来很好。我也尝试通过更改帧值但没有进展。在隐藏和减少 alpha 以使 view3 消失时,view3 出现在屏幕上的动画,但不是显示它。

iPhone6splus

iPhone5 Screen

【问题讨论】:

【参考方案1】:

问题是您使用的硬设置坐标。如果您检查 self.view.bounds(或 self.view3.superview.bounds),您会注意到 iPhone 5 上的视图与 iPhone 6/7 或 iPhone 6Plus 上的尺寸不同/7加。您应该计算相对于 self.view.bounds 指标的视图位置。

// for showing view 3
self.view3.hidden=NO;
[UIView animateWithDuration:0.5 animations:^
    CGRect parentBounds = self.view.bounds;
    CGRect destinationFrame = CGRectMake(0,parentBounds.size.width,parentBounds.size.height-95,95);
    [self.view3 setFrame:destinationFrame];
    self.view3.alpha = 1.0f;
 completion:^(BOOL finished) 
];

视图现在应该始终出现在父视图范围内,并且在 iPhone 5 上可见。

【讨论】:

@ShahiJabeen 关于这段代码是在 UIViewController 实现中还是在 UIView 中运行以及与“self”的关系,我能否提供更多背景信息?您如何创建 view3 以及它与view4 ? view4 是 view3 的孩子还是反之亦然? “它不起作用”是您在 SO 上可以说的最没有帮助的事情之一。详细描述它实际在做什么,描述你的视图是如何在屏幕上设置和安装的,它们开始时的状态,并显示完整的代码,而不是片段。您说“在隐藏和减少 alpha 以使 view3 消失时在屏幕上显示动画,但没有显示它”,这实际上没有意义。 @ekscrypto view3 和 view4 是主 UIView 的子视图,view3 和 view4 没有父子关系。我在主 UIView 中通过拖放添加了 view3 和 view4,但我正在为每个设备设置它们的框架。我已经在代码中显示了。此代码适用于除 iPhone 模拟器 5,5s 以外的其他模拟器。 @DuncanC 因为我只对这段代码感到痛苦,所以我与你们分享了。我正在开发 photoEditor 应用程序,view3 显示颜色按钮,view4 显示不同的字体按钮。问题仅在于view3。当我单击添加文本按钮以添加文本并更改文本的颜色和字体时,它不会出现在屏幕上。 view4 工作正常。这个问题只出现在 iPhone Simulator 5 和 5s 上。我希望你现在明白我的意思了。 检查我添加的图片链接以供您理解。希望你现在能理解我的问题。

以上是关于如何用动画取消隐藏 UIView的主要内容,如果未能解决你的问题,请参考以下文章

如何取消基于UIView块的动画?

如何在更改uiview的隐藏模式时添加动画?

iOS 用从左到右的动画取消隐藏视图

UIStackView 隐藏/取消隐藏排列的子视图问题

如何用Jquery控制单选按钮点击否然后隐藏其他文本框

UIView 子视图不平滑动画