如何用动画取消隐藏 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的主要内容,如果未能解决你的问题,请参考以下文章