首页 > 网站 > 建站经验 > 正文

-iOS开发:UIView动画详解

2019-11-02 14:32:20
字体:
来源:转载
供稿:网友

   执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码包装到一个代码块中。

  1.UIView动画具体创建方法

  - (void)buttonPressed

  {

  // 交换本视图控制器中2个view位置

  [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];

  //UIView开始动画,第一个参数是动画的标识,第二个参数附加的应用程序信息用来传递给动画代理消息

  [UIView beginAnimations:@"View Flip" context:nil];

  //动画持续时间

  [UIView setAnimationDuration:1.25];

  //设置动画的回调函数,设置后可以使用回调方法

  [UIView setAnimationDelegate:self];

  //设置动画曲线,控制动画速度

  [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];

  //设置动画方式,并指出动画发生的位置

  [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];

  //提交UIView动画

  [UIView commitAnimations];

  }

  - (void)viewDidLoad

  {

  [super viewDidLoad];

  //主要功能通过UIView动画完成2个试图控制器的切换

  self.blueController = [[BlueViewController alloc] initWithNibName:nil bundle:nil];

  //设置导航控制器view的大小占整个屏幕

  [self.blueController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];

  self.yellowController = [[YellowController alloc]initWithNibName:nil bundle:nil ];

  [self.yellowController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];

  //将2个控制器view插入到目前导航控制器视图上,yellowController后插入,显示在最前面

  [self.view insertSubview:self.blueController.view atIndex:0];

  [self.view insertSubview:self.yellowController.view atIndex:1];

  //创建导航控制器右按钮,按钮名字叫next

  //添加buttonPressed 事件

  self.rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(buttonPressed)];

  //将按钮添加到导航控制器默认右按钮上

  self.navigationItem.rightBarButtonItem = self.rightBarItem;

  }

  有个问题:如果动画不放在按钮事件中,直接放到viewDidLoad里,程序首先执行这个controller,这时动画是不会显示的。

  原因:出现这个问题是因为开机时候系统有个动画,系统动画和这个动画重复了。

  解决方案:

  1。将动画写在按钮事件中

  2。利用定时器。

  areAnimationsEnabled

  返回一个布尔值表示动画是否结束。

  + (BOOL)areAnimationsEnabled

  返回值

  如果动画结束返回YES,否则NO。

  beginAnimations:context:

  开始一个动画块

  + (void)beginAnimations:(NSString *)animationID context:(void *)context

  参数

  animationID

  动画块内部应用程序标识用来传递给动画代理消息-这个选择器运用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法来设置。

  context

  附加的应用程序信息用来传递给动画代理消息-这个选择器使用setAnimationWillStartSelector: 和setAnimation

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表