当前位置: 首页 > 知识库问答 >
问题:

iOS8动画bug

裴俊智
2023-03-14

我有一个动画视图的简单方法

-(void)animateSelf
{
    CABasicAnimation * animation;

    animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
    // settings ...
    [self.view.layer addAnimation:animation forKey:@"position.y"];

    animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    // settings ...
    [self.view.layer addAnimation:animation forKey:@"transform.rotation.z"];

    [UIView animateWithDuration: 1.0 animations:^{
        CGRect rect = self.view.frame;
        rect.origin.y += 800;
        self.view.frame = rect;
    } completion:nil];
}

对于iOS 7,它运行良好。但对于iOS 8来说,动画的表现是不可预测的。有没有办法在iOS 8中组合这些动画?

我试图用另一个CABasicAnimation来代替animateWithDuration:但没用。视图。帧日志是正确的,但视图的动画。框架从模糊原点跳出。

移除<代码>位置的CABASICANIZATION后。y(第一个)错误消失了。

共有3个答案

葛飞扬
2023-03-14

这个例子可能会对你有所帮助,我希望在浪费时间之前发现它。与其为帧设置动画,不如为其约束设置动画。单击要调整的自动布局约束(在interface builder中,例如顶部约束)。接下来,将其设置为IBOutlet;

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;

向上设置动画;

self.topConstraint.constant = -100;    
[self.viewToAnimate setNeedsUpdateConstraints]; 
[UIView animateWithDuration:1.5 animations:^{
    [self.viewToAnimate layoutIfNeeded]; 
}];

将动画设置回原始位置

self.topConstraint.constant = 0;    
[self.viewToAnimate setNeedsUpdateConstraints];  
[UIView animateWithDuration:1.5 animations:^{
    [self.viewToAnimate layoutIfNeeded];
}];

原来是我在这里发布的

因此,您可以调整self的约束。看法在您的示例中,框架。

柴晔
2023-03-14

对我起作用的是在制作动画之前的某个时间点禁用视图和视图子视图上的自动布局。在iOS8中,从情节提要中禁用自动布局是不够的。

[viewToAnimate removeFromSuperview];
[viewToAnimate setTranslatesAutoresizingMaskIntoConstraints:YES];
//addSubview again at original index
[superView insertSubview:viewToAnimate atIndex:index];
施俊明
2023-03-14

你有三个动画:

  1. 为层的位置设置动画

动画1和3碰撞。

  • iOS7的行为是动画3取消动画1。
  • iOS8的行为是动画1和动画3同时运行(加法动画)。

我建议您删除动画1,并查看相关的WWDC 2014视频(我认为是Building Interrupable and Acrupsive Interaction)。

 类似资料:
  • iOS8 Sampler 是 iOS 8 新函数的代码示例。 内容: Audio Effects New Image Filters Custom Filters Metal Basic Metal Uniform Streaming SceneKit HealthKit TouchID Visual Effects WebKit UIAlertController User Notificati

  • 动画剪辑 动画剪辑是 Unity 动画系统的核心元素。Unity 不仅支持从外部源导入动画,而且支持在编辑器的动画视图中创建和编辑动画(剪辑)。 从外部源导入动画 从外部源导入的动画剪辑可能包括: 动作捕捉工作室捕捉的人形动画 设计师通过外部 3D 程序(例如 3D Max 或 Maya)创建的动画 第三方的动画集合库(例如来自 Unity Asset store) 导入的单个时间线等分切割为多个

  • 动画控制器 动画控制器允许你为一个角色或其他游戏对象安排和维护一组动画。 控制器引用了动画剪辑,并且使用 状态机 来管理各种动画状态和它们之间的转换,可以把状态机认为是一种流程图,或者是一段在 Unity 中用可视化编程语言编写的简单程序。 下面的章节涵盖了 动画系统 Mecanim 提供的控制和序列化动画的主要功能。

  • 问题内容: 在Swift,iOS 8,Xcode 6 Beta 6中,我从tableView中删除一行时遇到了一些麻烦。每次尝试删除一行时,都会出现以下错误: / [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-3302.3.1 / UITableView.m:1581 2014-08-3

  • MATLAB提供两种生成生动活泼动画的方法: 在屏幕上不断擦除再重画对象,每次重画作增量变化。 保存许多不同图,然后作为电影回放。

  • trigger('shrinkOut', [ style({height: '*'}), ])