试图从 UIButton 后面滑出一个新的 UIView 是 UIAnimation
Posted
技术标签:
【中文标题】试图从 UIButton 后面滑出一个新的 UIView 是 UIAnimation【英文标题】:trying to slide a new UIView out from behind a UIButton ising UIAnimation 【发布时间】:2011-10-27 14:31:26 【问题描述】:我正在尝试从主 UIButton 后面推出一个按钮菜单(包含 UIButtons 的 UIView)
我已经包含了一个图片链接,以便更好地了解我在做什么(当按下主按钮时,包含按钮的蓝色部分会从主按钮后面滑出) -
http://imageshack.us/photo/my-images/27/screenshot20111027at419.png/
我创建了我的 UIView 并将我的按钮放在它上面,它的动画没有任何问题。我的计划是将按钮放在“屏幕外”(相对于我的 UIView 的坐标系),然后对其进行动画处理,以便 UIView 滑动到位(就像抽屉一样,UIView 最初完全隐藏)
但是按钮显示在原始 UIButton 上,这不是我想要的 ;)
有什么建议吗?有没有办法在主视图的某些部分隐藏 UIView?
很抱歉我的问题冗长,但我是新手 :) 非常感谢任何帮助!
T*
【问题讨论】:
【参考方案1】:@Octave1
我无法对你的问题发表评论,但我认为如果你模拟一张正在发生的事情与你想看到的事情的图像会有所帮助。
或者,您的一些代码可以帮助我们解决问题。
在将菜单设置为动画时,您可以隐藏不想看到的视图。 这是一个例子(对不起,如果我把你的观点搞混了)
/*
assume buttonMenu is defined
assume showMenuButton is defined
assume menuEndFrame is defined
*/
[UIView beginAnimations:@"ButtonMenu" context:nil];
[UIView setAnimationDuration:0.25];
buttonMenu.frame = menuEndFrame
showMenuButton.alpha = 0.0
[UIView commitAnimations];
如果这不是问题并且您的视图层次结构是问题,那么您可以使用这两种方法来帮助分层
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
【讨论】:
【参考方案2】:感谢有用的建议,最终问题出在视图层次结构上,事实证明这很有用:
- (void)sendSubviewToBack:(UIView *)view
为了更清楚我想要实现的目标,我包含了一个视频来演示(请注意,我需要使用另一个视图来坐在我的主菜单按钮后面,这样滑动菜单就不会在菜单按钮后面部分可见,这是深灰色的下半部分视图。我使用较深的灰色阴影来显示此视图的位置)
http://www.youtube.com/watch?v=nllXGh9sSls
以下是我的一些代码,供可能遇到类似问题的任何人使用:
- (void) setupInterface
//setting up the main button & the sliding button menu
[self addMyButton];
buttonMenu = [[ButtonMenu alloc] initWithFrame:(CGRectMake(100, 310, 120, 200)) ];
[self.view addSubview:buttonMenu];
[self.view sendSubviewToBack:buttonMenu];
- (void)MenuButtonClicked:(id)sender
[self rollOutIn]; //Call Flip BOOL
if (!rollOutMenuButton)
//pushing out the menu
buttonMenu.alpha = 0.0f;
[UIView beginAnimations:@"MoveView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.8f];
self.buttonMenu.frame = CGRectMake(100, 110, 120, 200);
buttonMenu.alpha = 1.0f;
[UIView commitAnimations];
else
//pulling the menu back in
[UIView beginAnimations:@"MoveView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.8f];
self.buttonMenu.frame = CGRectMake(100, 310, 120, 200);
buttonMenu.alpha = 0.0f;
[UIView commitAnimations];
希望这对其他人有所帮助:)
【讨论】:
【参考方案3】:这正是 UIPopOverController 旨在解决的用例。我建议您尝试重新发明***。
这是 Ray Wenderlich 关于 UIPopOverController 的优秀教程:http://www.raywenderlich.com/1056/ipad-for-iphone-developers-101-uipopovercontroller-tutorial
编辑:根据 cmets 和标签,这是关于 iPhone,而不是 iPad 的问题。 UIPopOverController 仅适用于 iPad,但有几个第三方库可以为手机带来类似的功能。
这是一个:http://iosdevelopertips.com/open-source/ios-open-source-popover-api-for-iphone-wepopover.html
从未使用过,无法推荐,但似乎有一些粉丝。谷歌搜索“popover for iphone”将为您提供一些教程和建议。
【讨论】:
UIPopOverController 不是只有 iPad 吗?该问题已标记为 iPhone。 @progrmr - 嗯,是的,它只是 iPad,问题被标记为 iPhone。我想我是因为他的演示艺术是在 iPad 模拟器上布置的。 是的,它适用于 iPhone,但我的模拟器默认情况下倾向于选择 iPad,到目前为止,出于 illustraton 的目的,这一直很好。我认为没有 iPhone 同等产品?以上是关于试图从 UIButton 后面滑出一个新的 UIView 是 UIAnimation的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 从 CollectionViewCell 中的 UIButton 推送到 ViewController
在 UIButton 的 ImageView 上将 ContentMode 设置为 AspectFill 不适用于较小的图像