打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何停止和扭转UIView的动画?
http://codego.net/576089/



我有它收缩时碰到切换按钮UIView的动画跳和它扩展恢复到原来的大小当再次接触到按钮。密封式前大灯一切都工作得很好。问题是,动画师注意到-例如3秒钟。在此期间,我还是希望能够进行交互的接口。当再次接触到跳跃键,而动画仍在进行中的动画应该就停在哪里是和反向。 在苹果Q&正如我已经找到了方法,所有的动画 但我没有看到从这里扭转动画(并省略原动画的其余部分)的方式。我该怎么办呢?
- (IBAction)toggleMeter:(id)sender { if (self.myView.hidden) {    self.myView.hidden = NO;  [UIView animateWithDuration:3 animations:^{   self.myView.transform = expandMatrix;  } completion:nil]; } else {  [UIView animateWithDuration:3 animations:^{   self.myView.transform = shrinkMatrix;  } completion:^(BOOL finished) {   self.myView.hidden = YES;  }]; }}
+
本文地址 :CodeGo.net/576089/ 
-------------------------------------------------------------------------------------------------------------------------
1. 除了以下(在此我们抓住当前状态从表现层,停止动画,重新保存从表现层的当前状态,并启动新的动画),有很多简单的解决方案。 DM做的基于块的动画,如果你想停止动画并启动一个新的活力,一种能将UIViewAnimationOptionBeginFromCurrentState选项:
[UIView animateWithDuration:3.0      delay:0.0     options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction     animations:^{      // specify the new `frame`, `transform`, etc. here     }     completion:NULL];
您可以通过新建停止当前动画师和动画启动在哪里当前的不放过实现这一目标。为此 CodeGo.net,您可以与quartz2D: 添加QuartzCore。你的项目,如果你还没有。 导入所需的头,如果你已经有了不:
#import <QuartzCore/QuartzCore.h>
让你的脚停止现有的动画:
[self.subview.layer removeAllAnimations];
获取参考电流表示层(即视图的状态,因为它恰恰是在这
CALayer *currentLayer = self.subview.layer.presentationLayer;
重置transform(或者frame或无论)根据在当前值presentationLayer
self.subview.layer.transform = currentLayer.transform;
现在,领导者从该transform(或者frame或其他)为新值:
[UIView animateWithDuration:1.0      delay:0.0     options:UIViewAnimationOptionAllowUserInteraction     animations:^{      self.subview.layer.transform = newTransform;     }     completion:NULL];
把所有的一起,这里就是我的切换尺度变换的2.0倍确定并背例程:
- (IBAction)didTouchUpInsideAnimateButton:(id)sender{ CALayer *currentLayer = self.subview.layer.presentationLayer; [self.subview.layer removeAllAnimations]; self.subview.layer.transform = currentLayer.transform; CATransform3D newTransform; self.large = !self.large; if (self.large)  newTransform = CATransform3DMakeScale(2.0, 2.0, 1.0); else  newTransform = CATransform3DIdentity; [UIView animateWithDuration:1.0       delay:0.0      options:UIViewAnimationOptionAllowUserInteraction      animations:^{       self.subview.layer.transform = newTransform;      }      completion:NULL];}
或者,如果你想切换frame尺寸从100×100到200×200和背部:
- (IBAction)didTouchUpInsideAnimateButton:(id)sender{ CALayer *currentLayer = self.subview.layer.presentationLayer; [self.subview.layer removeAllAnimations]; CGRect newFrame = currentLayer.frame; self.subview.frame = currentLayer.frame; self.large = !self.large; if (self.large)  newFrame.size = CGSizeMake(200.0, 200.0); else  newFrame.size = CGSizeMake(100.0, 100.0); [UIView animateWithDuration:1.0       delay:0.0      options:UIViewAnimationOptionAllowUserInteraction      animations:^{       self.subview.frame = newFrame;      }      completion:NULL];}
顺便说一句,虽然一般并不重要的真快动画,缓慢动画像你这样的,你可能需要设置动画的持续时间是扭转多远你在你目前的动画已经提前拒绝(例如,如果你是0.5秒到3.0秒的动画,当反向,不可思议不要想拿3.0秒扭转这一方面做了跳跃灯塔动画师的小部分,而仅仅0.5秒)。这可能看起来像:
- (IBAction)didTouchUpInsideAnimateButton:(id)sender{ CFTimeInterval duration = kAnimationDuration;    // default the duration to some constant CFTimeInterval currentMediaTime = CACurrentMediaTime(); // get the current media time static CFTimeInterval lastAnimationStart = 0.0;   // media time of last animation (zero the first time) // if we previously animated, then calculate how far along in the previous animation we were // and we'll use that for the duration of the reversing animation; if larger than // kAnimationDuration that means the prior animation was done, so we'll just use // kAnimationDuration for the length of this animation if (lastAnimationStart)  duration = MIN(kAnimationDuration, (currentMediaTime - lastAnimationStart)); // save our media time for future reference (i.e. future invocations of this routine) lastAnimationStart = currentMediaTime; // if you want the animations to stay relative the same speed if reversing an ongoing // reversal, you can backdate the lastAnimationStart to what the lastAnimationStart // would have been if it was a full animation; if you don't do this, if you repeatedly // reverse a reversal that is still in progress, they'll incrementally speed up. if (duration < kAnimationDuration)  lastAnimationStart -= (kAnimationDuration - duration); // grab the state of the layer as it is right now CALayer *currentLayer = self.subview.layer.presentationLayer; // cancel any animations in progress [self.subview.layer removeAllAnimations]; // set the transform to be as it is now, possibly in the middle of an animation self.subview.layer.transform = currentLayer.transform; // toggle our flag as to whether we're looking at large view or not self.large = !self.large; // set the transform based upon the state of the `large` boolean CATransform3D newTransform; if (self.large)  newTransform = CATransform3DMakeScale(2.0, 2.0, 1.0); else  newTransform = CATransform3DIdentity; // now animate to our new setting [UIView animateWithDuration:duration       delay:0.0      options:UIViewAnimationOptionAllowUserInteraction      animations:^{       self.subview.layer.transform = newTransform;      }      completion:NULL];}

2. 有一招做到这一点,但它是必要写的收缩(和另一个类似的一个利差):
- (void) shrink {  [UIView animateWithDuration:0.3      animations:^{      self.myView.transform = shrinkALittleBitMatrix;      }      completion:^(BOOL finished){       if (continueShrinking && size>0) {        size=size-1;        [self shrink];         }      }];}
0.3秒每一个在其中收缩整个动画的十分之一现在跳,关键是要缩小动画动画的3秒打入10(或10多,当然):shrinkALittleBitMatrix。在每个动画完成后调用只当布尔伊瓦continueShrinking当int是真实的Ivarsize为正(在全尺寸的视图。将大小=10,以最小的尺寸的视图。将大小=0)。当您按下按钮更改伊瓦continueShrinking为false,然后调用expand。这将停止动画在小于0.3秒。 好了,你必须填写详细资料,但我希望它能帮助。 + 
3. 才能评价与互动的用户界面,而动画是一个
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ //Your animation} completion:^(BOOL finished) {}];
+
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
卡片式弹出窗口
卡片动画 Card Animation
IOS UI 第四篇:基本UI
IOS疯狂基础之
iOS  手势和动画
[apple文档]UIView 编程指南
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服