我将如何在 OSX 上制作这个 iOS 动画? [英] How would I do this iOS animation on OSX?

查看:19
本文介绍了我将如何在 OSX 上制作这个 iOS 动画?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 iOS 中有一个非常简单的动画,它淡出一个视图,调整一个容器的大小以适应另一个视图,然后又淡入另一个视图.这很容易做到,而且非常简单.

I have a very simple animation in iOS that fades a view, resizes a container to fit another view, then fades that other view back in. It's quite easy to do and very straightforward.

我一直在尝试在 OSX 上做一些与此非常相似的事情,但我一直无法弄清楚如何去做.与 iOS 相比,OSX 上的动画内容感觉如此笨拙和困难.

I've been trying to do something pretty much exactly like this on OSX, but I haven't been able to figure out how to do it. The animation stuff on OSX feels so clunky and difficult compared to iOS.

任何帮助将不胜感激!

谢谢!:)

// Fade out viewOne, resize frame to fit viewTwo, fade in viewTwo
[UIView animateWithDuration: 0.15
        animations: ^{
            [viewOne setAlpha:0.0];
        }
        completion: ^(BOOL finished) {
            [UIView animateWithDuration: 0.2
                    animations: ^{
                        [self setFrame: [viewTwo frame]];
                    }
                    completion: ^(BOOL finished) {
                        [viewTwo setAlpha: 0.0];
                        [self addSubview: viewTwo];
                        [UIView animateWithDuration: 0.15
                                animations: ^{
                                    [viewTwo setAlpha:1.0];
                                }];
                    }];
         }];

推荐答案

我编写了一个小类,当在 OSX 上使用动画制作代理时,它使用块来完成与上述基本相同的事情.

I've written a small class that uses blocks to accomplish essentially the same thing as above when using the animator proxy on OSX.

请注意,这个类不是线程安全的,也没有经过任何特定或压力测试.

Please note, this class is not thread safe and hasn't undergone any specific or stressful tests.

//Interface
@interface MZAnimator : NSObject{}

+ (void)animateWithDuration:(NSTimeInterval)duration 
                  animation:(void (^)(void))animationBlock;
+ (void)animateWithDuration:(NSTimeInterval)duration 
                  animation:(void (^)(void))animationBlock
                 completion:(void (^)(void))completionBlock;
@end


//Implementation
@interface MZAnimator ()
+ (void)runEndBlock:(void (^)(void))completionBlock;
@end

@implementation MZAnimator

+ (void)animateWithDuration:(NSTimeInterval)duration 
                  animation:(void (^)(void))animationBlock
{
  [self animateWithDuration:duration animation:animationBlock completion:nil];
}
+ (void)animateWithDuration:(NSTimeInterval)duration 
                  animation:(void (^)(void))animationBlock
                 completion:(void (^)(void))completionBlock
{
  [NSAnimationContext beginGrouping];
  [[NSAnimationContext currentContext] setDuration:duration];
  animationBlock();
  [NSAnimationContext endGrouping];

  if(completionBlock)
  {
    id completionBlockCopy = [[completionBlock copy] autorelease];
    [self performSelector:@selector(runEndBlock:) withObject:completionBlockCopy afterDelay:duration];
  }
}

+ (void)runEndBlock:(void (^)(void))completionBlock
{
  completionBlock();
}
@end

这篇关于我将如何在 OSX 上制作这个 iOS 动画?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆