我有一个数据录入应用程序,让用户在导航控制器的不同视图中输入约6条信息。这可以正常工作,但一旦用户习惯了应用程序,下一个屏幕出现所需的时间就会减慢用户的速度。加速iPhone动画
我尝试了没有动画的应用程序,但它感觉不太对。有没有办法让动画更快发生?我主要使用导航控制器,表格视图和选取器视图。
我有一个数据录入应用程序,让用户在导航控制器的不同视图中输入约6条信息。这可以正常工作,但一旦用户习惯了应用程序,下一个屏幕出现所需的时间就会减慢用户的速度。加速iPhone动画
我尝试了没有动画的应用程序,但它感觉不太对。有没有办法让动画更快发生?我主要使用导航控制器,表格视图和选取器视图。
还有的将是一个点球每次加载一个新视图的时候,你可以尝试使用整合滚动视图或不同的布局屏幕。 另外,如果你正在加载任何不必要的图形,你可能想删除它们。
你也可以添加每个视图作为一个子视图自己在这种情况下,你有过除其他事项外动画时长控制。这段代码会为你做,但要小心,因为我只写了它,并没有测试它(过渡样式和布尔参数可以被删除,因为它们现在什么都不做)。
UIViewControllerExtendedPresentModalViewController.h
#import <Foundation/Foundation.h>
typedef enum _ExtendedModalTransitionStyle
{
ExtendedModalTransitionStyleTopDown
} ExtendedModalTransitionStyle;
@interface UIViewController (ExtendedPresentModalViewController)
- (void)presentModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated;
- (void)dismissModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated;
@end
UIViewControllerExtendedPresentModalViewController.m
#import "UIViewControllerExtendedPresentModalViewController.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIViewController (ExtendedPresentModalViewController)
- (void)presentModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated
{
[modalViewController retain]; // we'll need this for a little while, hang on to it.
CATransition* transition = [CATransition animation];
[transition setDuration: 0.4];
[transition setTimingFunction:
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];
[transition setType: kCATransitionMoveIn];
[transition setSubtype: kCATransitionFromBottom];
[[[self view] layer] addAnimation: transition
forKey: nil];
[[self view] addSubview: [modalViewController view]];
}
- (void)dismissModalViewController: (UIViewController*)modalViewController
withTransitionStyle: (ExtendedModalTransitionStyle)style
animated: (BOOL)animated
{
CATransition* transition = [CATransition animation];
[transition setDuration: 0.4];
[transition setTimingFunction:
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];//kCAMediaTimingFunctionEaseInEaseOut]];
[transition setType: kCATransitionReveal];
[transition setSubtype: kCATransitionFromTop];
[[[[modalViewController view] superview] layer] addAnimation: transition
forKey: nil];
[[modalViewController view] removeFromSuperview];
[modalViewController release]; // all done, we can let this go.
}
@end
您是否重复使用表格视图中的单元格?确保真正重用它们,换句话说,在if(cell == nil)情况下执行单元的所有设置,并且仅在常见情况下应用数据(应用于重用和新创建的)。
请注意透明度可能会影响单元格的性能。通常看起来你必须让事情变得透明,但也许你没有,因为UITableViewCell意识到了这些问题。关闭某些对象的透明度可能看起来不对,但值得尝试查看它是否真的有效。滚动单元格的大部分成本是随着单元格移动而合成的,而不是最初创建单元格的。
,可以帮助做您应用到您的提前,而不是将所有的意见到单元格的视图的合成的另一件事,那么你申请只有一个预制以你的细胞。
如果你实际上是在动画滚动细胞的观点,你可能需要重新考虑或至少使用一些简化,使其在设备上征税少一点。
你也可以考虑采用Matt Gallagher's strategy for cell handling - 它会阻止你的cellForRowAtIndexPath变成一个冗长而讨厌的ifs集合。
我不认为有一个在我的代码中的性能问题 - 如果我摆脱了动画的UI是一个很大的活泼,但很少像iPhone一样。 问题在于,动画运行需要一些时间。而不是运行0.5秒的动画,我希望它在0.25秒内运行。 这是一个假的例子,使其更清晰。转到日历应用程序,然后按右箭头以让日历转到下个月。下个月将视觉上滑入视野。我的问题是,我将如何在下个月更快地滑入视图。 – 2009-10-22 23:14:41
我现在明白了 - 我确实看到这个: http://everburning.com/news/flicking-the-iphone/ 但是有一些手动工作要做。我不认为你可以改变系统转换的速度,比如由pushViewController:withAnimation引起的转换速度,这将导致应用程序的批准。我知道通过访问私有方法的一种方式,似乎停止与3.0的发布工作。 – 2009-10-23 00:18:20
谢谢,我会试试这个。 – 2009-10-23 17:31:18
它会增加您必须执行的管理数量,但可以为您提供所需的额外速度。 – jessecurry 2009-10-23 19:38:38
我没有时间去尝试这个特定的代码,但很明显我需要自己完成所有的转换(如你所建议的),而不是依赖于正常的行为。 – 2009-10-26 17:07:49