Iphone 在XIB文件中处理动画的最佳实践,重复代码最少
我有不同的UIViewController,其中包含从视图中出现和消失的组件(具有类似于平移的动画)。 我希望有一个类可以减少每个UIViewController中的代码量,并且可以在XIB文件中配置 因此,我的XIB文件包含:Iphone 在XIB文件中处理动画的最佳实践,重复代码最少,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,我有不同的UIViewController,其中包含从视图中出现和消失的组件(具有类似于平移的动画)。 我希望有一个类可以减少每个UIViewController中的代码量,并且可以在XIB文件中配置 因此,我的XIB文件包含: 需要在两个位置之间移动的组件(以下屏幕截图中为“我的视图”) vVisible:一个UIView,其作用类似于一个指示器,以表示可见位置 vHidden:一种UIView,其作用类似于一个指示器,以表示隐藏位置 以下是它在XCode中的外观: 我创建了一个Appe
- 需要在两个位置之间移动的组件(以下屏幕截图中为“我的视图”)
- vVisible:一个UIView,其作用类似于一个指示器,以表示可见位置
- vHidden:一种UIView,其作用类似于一个指示器,以表示隐藏位置
IBOutlet UIView * vVisible;
IBOutlet UIView * vHidden;
IBOutlet UIView * v;
以及一个公共方法(仅用于在vVisible的rect和vHidden视图的rect之间运行动画):
因此,在我的UIViewController代码中,我只需要一些代码:
- 在头文件中:要绑定到XIB的AppearingController实例的iboutlet/属性
- 在实现文件中:我可以调用[self.appearingController showVisible:FALSE]来运行动画以隐藏/取消隐藏组件
- AppearingController是一个UIViewController(我没有使用对象库中的对象或外部对象进行管理)
- vVisible和vHidden是视图,但我不需要视图方法/功能。我只需要view.frame来指示位置
谢谢。这看起来相当不错!实际上,您可以通过多种方式对其进行编码。但是,当谈到这个特定的示例时,您是否想要更好的编码方法并不重要。当你承担一个大得多的项目时,你必须设计你的数据结构和编码方案,这样你才能以最有时间限制和优化的方式完成它 例如,在一个大得多的项目中,您需要处理100个图像,您可以创建一个动画类,并相应地对它们进行子类化,然后引用它们或继承它们,这样您的方法既合乎逻辑又节省时间。希望你明白了
-(void) showVisible:(BOOL)visible {
CGRect frameDst = self.vVisible.frame;
if(!self.visible) frameDst = self.vHidden.frame;
CGPoint p = CGPointMake(CGRectGetMidX(frameDst), CGRectGetMidY(frameDst));
self.currentPosition = p;
CABasicAnimation *frameTranslation = [CABasicAnimation animationWithKeyPath:@"position"];
frameTranslation.toValue = [NSValue valueWithCGPoint:p];
frameTranslation.duration = 0.40;
frameTranslation.repeatCount = 1;
frameTranslation.removedOnCompletion = NO;
frameTranslation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
frameTranslation.cumulative = NO;
frameTranslation.additive = NO;
frameTranslation.delegate = self;
[self.v addAnimation:frameTranslation forKey:@"position"];
}