我正在尝试将动画添加到UIView。 动画的目的是“动画化”出现在屏幕上的View(而不是仅仅出现在屏幕上)。

动画具有所有大小缩放比例:从5%开始,增加到120%,然后很快又回到正常比例的100%。

我的问题是,在动画开始之前,完整比例的UIView会很快出现。

这是代码:

UIView * myView = [[UIView alloc] initWithFrame:someFrame];
[self.view addSubview:myView];
[self initialAnimationFor:myView];

-(void) initialAnimationFor:(UIView*)pView {

    const CFTimeInterval firstDuration = 0.75f;
    const CFTimeInterval secondDuration = 0.025f;
    const float initialValue = 0.05f;
    const float middleValue = 1.20f;

    CABasicAnimation * firstAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    firstAnimation.duration = firstDuration;
    firstAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    firstAnimation.fromValue = [NSNumber numberWithFloat:initialValue];
    firstAnimation.toValue = [NSNumber numberWithFloat:middleValue];

    CABasicAnimation * secondAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    secondAnimation.duration = secondDuration;
    secondAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    secondAnimation.fromValue = [NSNumber numberWithFloat:middleValue];
    secondAnimation.toValue = [NSNumber numberWithFloat:1.0f];

    CAAnimationGroup *animationGroup = [CAAnimationGroup new];
    animationGroup.duration = firstDuration + secondDuration;
    animationGroup.animations = @[firstAnimation, secondAnimation];

    [pView.layer addAnimation:animationGroup forKey:nil];
}

有任何想法吗? 谢谢!

#1楼 票数:1 已采纳

我将采用另一种技术,并使用链接的UIView块动画,如下所示:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    UIView *myView          = [[UIView alloc] initWithFrame:CGRectMake(40, 40, 200, 200)];
    myView.backgroundColor  = [UIColor redColor];
    [self initialAnimationFor:myView];
}
- (void)initialAnimationFor:(UIView*)pView {
    pView.transform = CGAffineTransformMakeScale(0.05f, 0.05f);
    if (pView.superview == nil) {
        [self.view addSubview:pView];
    }
    [UIView
     animateWithDuration:0.75f
     animations:^{
         pView.transform = CGAffineTransformMakeScale(1.20f, 1.20f);
     }
     completion:^(BOOL finished) {
         [UIView
          animateWithDuration:0.25f // <-- Your old value of 0.025f makes the animation VERY quick
          animations:^{
              pView.transform = CGAffineTransformIdentity;
          }
          ];
     }
     ];
}

使用此设置,您将获得“增长到略大于100%,然后'稳定'到100%”的效果。

这是可行的解决方案吗?

  ask by dornad translate from so

未解决问题?本站智能推荐:

2回复

如何知道UIView动画何时全部完成

我创建的自定义视图正在通过其容器进行动画处理 - 在我看来,我使用其他动画更新部分子视图(例如UICOllectionView) 我看到这是在抛出错误 四处搜索我看到我的视图附有动画: 所以现在在执行动画操作之前我检查: 我看到返回动画对象: 在这一点上,我想“等待”,直到所
1回复

动画UIView大小跳跃

通过更改UIView的高度和位置来使其动画化。 第一个动画跳了吗? 我将故事板中设置的UIView(theView)的大小设置为216的高度。因此,应用程序加载并显示theView。 我单击theView,它的高度迅速跳升到200+像素,然后按需要进行动画处理? }
2回复

使用动画更改UIView背景颜色

我想用过渡动画改变我的UIView背景颜色。 例如,如果视图为红色,我将其更改为蓝色。 蓝色将从屏幕底部向上滑动到顶部并填满整个屏幕。 我想通过制作具有所需颜色的相同尺寸的UIView ,然后从屏幕上直到顶部制作动画来实现这一点。 尽管如此,这似乎并不是一种非常优雅的方式。 有没有更好
1回复

在UIViews图层动画化后,UIView上的UIPanGestureRecognizer表现得很奇怪

我有一系列UIViews,我沿着弧线动画。 每个视图都有一个UIPanGestureRecognizer,它在任何动画发生之前按预期工作。 但是,在为视图设置动画后(使用下面的方法为视图的图层设置动画),手势无法按预期工作; 事实上,它似乎在原始屏幕位置工作。 我尝试了各种各样的事情
2回复

UIView动画块与CAAnimation

iOS动画专家! 每种方法的优缺点是什么? 我知道Apple建议使用块而不是旧的UIView动画方法( UIView beginAnimations等),但CAAnimation呢? 你什么时候使用一种方法而不是另一种? 在性能方面有权衡吗?
1回复

动画中断时未调用UIView动画完成块

每当此动画结束时,我都试图调用一个方法,但是在某些情况下,例如,当用户离开应用程序时,永远不会调用其完成块。 同样,当VC与UIView动画同时显示其动画时,也不会调用完成块。 即使动画以某种方式被中断,我该怎么做以确保回调被调用? 我是否应该完全不使用UIView动画完成块,而是使用其
1回复

使用CoreAnimation一次对多个UIView进行动画处理

我正在使用UIImageView作为背景图像,并在其上放置了多个UIButton。 现在,我想通过平滑的动画(使用CoreAnimation)将UIImageView(带有所有按钮)移到视线之外。 我在IB中找不到容器或分组元素,所以有没有办法一次移动所有视图? 先感谢您!
1回复

CAAnimation-更改动画最后一帧的属性?

我正在对UIView(或更确切地说是其CALayer)进行动画处理,并且在动画结束时它不再可见(我进行了3D变换,使其绕y旋转了90°,想象有一个朝着您的门打开),尽管它是从技术上来说“可见”,因为其框架仍在屏幕上。 在此动画的结尾,我从animationDidStop:finished:方