iPhone 向右翻转按钮(如 iTunes)
我正在尝试在两种视图之间切换。 这很简单,代码如下,但我还想同时翻转用于执行翻转的按钮。
当您播放曲目时,您可以在 iPod 应用程序中看到此行为; 点击翻转按钮可在封面艺术和曲目列表之间翻转,但同时会翻转按钮。
这是导航控制器上的页面,我要翻转的按钮是 rightBarButtonItem
。
这是我到目前为止的代码。 这会翻转视图,但不会翻转 rightBarButton。
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: 0.5f];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
showingBackside = !showingBackside;
if (showingBackside) {
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft
forView: self.view
cache: YES];
[self.view addSubview: backside.view];
[frontside.view removeFromSuperview];
} else {
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight
forView: self.view
cache: YES];
[self.view addSubview: frontside.view];
[backside.view removeFromSuperview];
}
// flip image, too
NSString *newImage = showingBackside ? @"backside.png" : @"frontside.png";
[(self.navigationItem.rightBarButtonItem) setImage: [UIImage imageNamed: newImage]];
[UIView commitAnimations];
(这里的图像翻转代码可能无法编译;我在尝试解释我想要做什么之后添加了它。)
我遇到麻烦的是我想更改导航控制器中最右边的按钮,以便它同时翻转。
我该怎么做呢? 我要对什么视图进行动画处理?我是将其作为同一动画块的一部分还是作为单独的动画块进行? 任何提示将不胜感激,我绝对还没有很好地处理动画。
I'm trying to flip between two views. That's easy, the code is below, but I also want to simultaneously flip the button used to perform the flip.
You can see this behavior in the iPod application when you're playing a track; tapping the flip button flips between the cover art and the track listing, but it flips the button at the same time.
This is a page on the navigation controller, and the button I want to flip is the rightBarButtonItem
.
Here's the code I have so far. This flips the view, but not the rightBarButton.
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: 0.5f];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
showingBackside = !showingBackside;
if (showingBackside) {
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft
forView: self.view
cache: YES];
[self.view addSubview: backside.view];
[frontside.view removeFromSuperview];
} else {
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight
forView: self.view
cache: YES];
[self.view addSubview: frontside.view];
[backside.view removeFromSuperview];
}
// flip image, too
NSString *newImage = showingBackside ? @"backside.png" : @"frontside.png";
[(self.navigationItem.rightBarButtonItem) setImage: [UIImage imageNamed: newImage]];
[UIView commitAnimations];
(The image flipping code here may not compile; I added it after to try to explain what I was trying to do.)
Where I'm running into trouble is I want to change the rightmost button in the navigation controller so it flips simultaneously.
How do I do this? What view do I animate, and do I do it as part of the same animation block or as a separate one? Any tips would be appreciated, I definitely don't have a good handle on animation yet.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
此处有一些讨论,但解决方案并不是那么优雅。
首先,由于
UIBarButtonItem
不是UIView
的后代,因此您可能无法直接在UIBarButtonItem
上使用 UIKit 动画。 但是,您可以尝试设置customView
并为其设置动画。 您可以使用相同的动画块。There's some discussion here, but the solution is not so elegant.
First of all, since
UIBarButtonItem
is not a descendant ofUIView
, you probably cannot use UIKit animations directly on theUIBarButtonItem
. However, you can try setting acustomView
and animating that. You can use the same animation block.好吧,这就是我实际上解决这个问题的方法:
我已经在使用自定义标题视图。 我没有使用
rightBarButtonItem
,而是使自定义视图更宽。我创建了按钮两侧的图像以及导航框架,并将它们嵌入到应用程序中。 在我的标题视图中,我放置了:
UIView
,它将替代右侧控件(称为rightControl
),并放置在适当的位置。UIView
上的按钮,响应UIControlEventTouchUpInside
并触发我的flipSide:
。在运行时,我为每个状态创建一个 UIImageView。 我将两个
UIImageView
放入rightControl
中,但隐藏非默认的那个。 我在专用动画块中的flipSide:
中切换隐藏标志。太奇怪了。 但它有效。
Okay, here's what I actually did to fix this:
I was already using a custom title view. Instead of using
rightBarButtonItem
, I made my custom view wider.I created an image of both sides of the button, complete with the navigation frame, and embedded them into the application. In my title view, I put:
UIView
that will be my replacement for the right control (call itrightControl
), positioned appropriately.UIView
that responds toUIControlEventTouchUpInside
and triggers myflipSide:
.At runtime I create a
UIImageView
for each state. I putbothUIImageView
s inrightControl
, but hide the one that isn't default. I switch the hidden flags around inflipSide:
in a dedicated animation block.Insanely weird. But it works.
只需使用自定义 UIView 作为右侧导航按钮,其中包含两个可在其之间切换的按钮。
您可以使用直接的方法创建显示为右侧导航按钮项的自定义 UIView。 此 UIView 应包含要在其之间翻转的两个 UIButton。 请记住,UIButton 也是 UIView,因此可以使用与普通 UI 视图相同的转换来翻转它们,当然也可以点击它们! 以下是一些有效的示例代码:
注意:我使用便利函数来创建按钮作为 UIViewController 的自定义类别(注意:您也可以添加相同的代码来为 UIView 创建自定义类别,只需复制相同的行并替换 UIViewController with UIView) - 如果您也想使用它,只需通过包含下面的代码创建一个自定义类别,或者您可以像平常一样创建 UIButtons。
Just use a custom UIView for the right navigation button that contains two buttons to flip between.
You can use a straight forward approach of creating a custom UIView that is displayed as the right navigation button item. This UIView should contain the two UIButtons you want to flip between. Remember that UIButtons are UIViews too so they can be flipped using the same transitions that a normal UI view can be flipped with and of course they can be tapped! Here is some sample code that works:
Note: I use a convenience function to create buttons as a custom category of UIViewController (note: you can add this same code to create a custom category for UIView too, just copy the same lines and replace UIViewController with UIView) - If you want to use it too just create a custom category by including this code below, alternately you can create the UIButtons as you normally would.