js333 > 计算机互联网 > 关于OC中的几种代码延迟执行方式

原标题:关于OC中的几种代码延迟执行方式

浏览次数:118 时间:2019-11-28

至于OC中的两种代码延迟推行措施,oc两种代码延迟

第一种: [UIView animateWithDuration:3 delay:3 options:1 animations:^{         self.btn.transform = CGAffineTransformMakeTranslation(300, 400);     } completion:^(BOOL finished) {         NSLog(@"view animation结束");     }];//不会卡住线程,animations  block中的代码对于是支撑animation的代码,才会有延时间效益果,          对于不扶助animation的代码 则 不会有延时间效益果   第三种: [NSThread sleepForTimeInterval:3];//堵塞线程,浪费品质 ,日常不引入用   第二种:最常用 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(卡塔尔(قطر‎, ^{             }卡塔尔;//定制了延时试行的天职,不会堵塞线程,功效较高(推荐应用)    第各个: [self performSelector:@selector(test) withObject:nil afterDelay:3];//不堵塞线程  

第一种:[UIView animateWithDuration:3 delay:3 options:1 animations:^{ self.btn.transform = CGAffineTransform...

iOS开发:UIView的Animation效果

   所谓动漫效果,正是会动的画,到iOS App中的话的话,就是各类UIView的位移。 出主意看,借使我们同舟共济来达成全部UIView的卡通片效果,须要构思些什么事物呢?

  * 该UIView曾在哪里?

  * 该UIView最终会动到哪儿?

  * 该UIView以什么的措施移动到当年?

  * 该动漫片持续多长期?

  * 每一次活动的蝇头时间距离?

  * 每便最时辰间间隔的移动的应当移动到什么地方?

  * ….

  思考那是三个多么杀头脑细胞的历程,极其是每三遍的卡通进度都要重复那黄金年代折磨的进度。

  万幸,现实比想象的光明, 苹果公司为开垦者考虑了地方的题目,通过动用UIKit提供的卡通片帮忙,开辟者只要求轻便的几行代码就能够兑现有滋有味的动漫效果。在UIKit中,全体的卡通片效果协理的诀窍都在UIView类中。

  首先,在UIView中有大多属性用以描述一个UIView的情形,而动漫片正是让UIView从多少个景色平滑的交接到其它一个景况的经过。那一个属性有:

金沙js333娱乐场 1

  通过设置那么些属性,基本上就化解了动漫中的移动到何地的标题。

  接着,苹果集团在UIView中步入过多格局来方便家控制动漫的移动时间,以致运动的诀要。iOS3.0及早先,UIView扶助的Animation方法犹如下这么多:

  Object-c代码

  @interface UIView(UIViewAnimation)

  + (void)beginAnimations:(NSString *)animationID context:(void *)context; // additional context info passed to will start/did stop selectors. begin/commit can be nested

  + (void)commitAnimations; // starts up any animations when the top level animation is commited

  // no getters. if called outside animation block, these setters have no effect.

  + (void)setAnimationDelegate:(id)delegate; // default = nil

  + (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context

  + (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

  + (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2

  + (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0

  + (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date])

  + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut

  + (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional

  + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. used if repeat count is non-zero

  + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

  + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; // current limitation - only one per begin/commit block

  + (void)setAnimationsEnabled:(BOOL)enabled; // ignore any attribute changes while set.

  + (BOOL)areAnimationsEnabled;

  @end

  这一个措施丰富的不直观,开荒者还是须要花多数年华去思谋怎么构成那些办法。可是自从iOS4.0提供块语法援助之后,苹果公司把动漫效果的落到实处封装了后生可畏晃,效果立杆见影,直观了成都百货上千,因而大家一同能够不用去看上边的那多少个方法,注重关怀如下的措施:

  Object-c代码

  @interface UIView(UIViewAnimationWithBlocks)

  + (void)animateWithDuration:(NSTimeInterval)duration

  delay:(NSTimeInterval)delay

  options:(UIViewAnimationOptions)options

  animations:(void (^)(void))animations

  completion:(void (^)(BOOL finished))completion;

  + (void)animateWithDuration:(NSTimeInterval)duration

  animations:(void (^)(void))animations

  completion:(void (^)(BOOL finished))completion

  NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0

  + (void)animateWithDuration:(NSTimeInterval)duration

  animations:(void (^)(void))animations

  NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL

  + (void)transitionWithView:(UIView *)view

  duration:(NSTimeIntervl)duration

  options:(UIViewAnimationOptins)options

  animations:(void (^)(void)animations

  completion:(void (^)(BOOL finished) completion

  NS_AVAILABLE_IOS(4_0);

  + (void)transitionFromView:(UIView *)fromView

  toView:(UIView *)toView

  duration:(NSTimeInterval)duration

  options:(UIViewAnimationOptions)options

  completion:(void (^)(BOOL finished))completion

  NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview

  @end

  下边包车型地铁多少个格局从名字上看就老大直观。前多个法子都得以按如下的不二等秘书技直译,只是后三个使用了部分暗中同意参数而已:

  Java代码

  做三个卡通效果,持续时间为duration,

  延迟delay秒最初实践 ,

  以options钦定的点子运转这一个动漫,

  animations块中钦点哪些UIView会出席本次动漫效果,以至动漫效果完毕时这个UIView会是贰个哪些动静,

  动漫实现之后,执行completion块举办完结。

  有了那3个主意,开拓者只要求构思,带头值,结果值,持续时间,运生势势就能够了,具体的内幕移动都提交类库。

  后2个措施是用于UIView相互之间转变的,个人以为用场相当的小,因为用地点的多少个方法相像能够做到那几个职能,由此略过。

  关于UIView的动画效果辅助,有2点值得后生可畏提

  * 上边装有的情势都以类措施,当调用这么些方法之后,系统会新起线程推行动漫效果,不会拥塞主线程的施行。

  * UIView的Animation效果只支持部分大概的2D动漫效果,复杂的门阀还得探究Core Animation。

  三个实战例子

  在本身写的五个小游戏的主机分界面中,作者利用了有个别卡通的功力,主分界面包车型客车设计图如下:

金沙js333娱乐场 2

  动漫后的意义图如下:

金沙js333娱乐场 3

  笔者想要的成效便是,加载主分界面后,图片缓缓的展开成扇形,然后游戏的美食做法展现供游戏发烧友点击。

  代码如下:

  首先,构思动漫前情状,让想展示的UIView不可知:

  Object-c代码

  -(void) prepareForIntroAnimation

  {

  self.sImageView.hidden=YES;

  self.nImageView.hidden=YES;

  self.aImageView.hidden=YES;

  self.pImageView.hidden=YES;

  self.jokerImageView.hidden=YES;

  self.hostGameButton.alpha=0.0f;

  self.joinGameButton.alpha=0.0f;

  self.singlePlayerGameButton.alpha=0.0f;

  self.helpButton.alpha=0.0f;

  _buttonsEnabled = NO;

  }

金沙js333娱乐场,  然后,显示动漫效果:

  Object-c代码

  -(void) performAnimation

  {

  //显示UIView

  self.sImageView.hidden=NO;

  self.nImageView.hidden=NO;

  self.aImageView.hidden=NO;

  self.pImageView.hidden=NO;

  self.jokerImageView.hidden=NO;

  [UIView animateWithDuration:0.65f

  delay:0.5f

  options:UIViewAnimationOptionCurveEaseIn

  animations:^

  {

  //分明UIView的的宗旨岗位和偏转角度

  self.sImageView.center = CGPointMake(80.0f, 108.0f);

  self.sImageView.transform = CGAffineTransformMakeRotation(-0.22f);

  self.nImageView.center = CGPointMake(160.0f, 93.0f);

  self.nImageView.transform = CGAffineTransformMakeRotation(-0.1f);

  self.aImageView.center = CGPointMake(240.0f, 88.0f);

  self.pImageView.center = CGPointMake(320.0f, 93.0f);

  self.pImageView.transform = CGAffineTransformMakeRotation(0.1f);

  self.jokerImageView.center = CGPointMake(400.0f, 108.0f);

  self.jokerImageView.transform = CGAffineTransformMakeRotation(0.22f);

  }

  completion:nil];

  [UIView animateWithDuration:0.5f

  delay:1.0f

  options:UIViewAnimationOptionCurveEaseOut

  animations:^

  {

  //光滑度设置为1,展现游戏菜单。

  self.hostGameButton.alpha = 1.0f;

  self.joinGameButton.alpha = 1.0f;

  self.singlePlayerGameButton.alpha = 1.0f;

  self.helpButton.alpha = 1.0f;

  }

  completion:^(BOOL finished)

  {

  _buttonsEnabled = YES;

  }];

  }

  此外,动漫效果还足以行使completion的回调块做连接,达成多个卡通效果的一连。

所谓动漫效果,正是会动的画,到iOS App中的话的话,就是种种UIView的位移。 动脑看,假诺大家精诚团结来完结全体...

本文由js333发布于计算机互联网,转载请注明出处:关于OC中的几种代码延迟执行方式

关键词:

上一篇:没有了

下一篇:你所不知道的注册表的五个秘密金沙js333娱乐场,