Подтвердить что ты не робот

Как мне сделать эту анимацию iOS на OSX?

У меня очень простая анимация в iOS, которая меняет вид, изменяет размер контейнера, чтобы он соответствовал другому представлению, а затем снова исчезает в этом другом представлении. Это довольно легко сделать и очень просто.

Я пытаюсь сделать что-то очень похожее на OSX, но я не смог понять, как это сделать. Анимация на OSX кажется такой неуклюжей и трудной по сравнению с 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];
                                }];
                    }];
         }];
4b9b3361

Ответ 1

Я написал небольшой класс, который использует блоки для выполнения по существу того же самого, что и выше, при использовании прокси-сервера аниматора в OSX.

Обратите внимание, что этот класс не является потокобезопасным и не претерпел каких-либо конкретных или стрессовых тестов.

//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

Ответ 2

Вы можете использовать:

  [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    [context setDuration:2.0];
    //Animation code
  } completionHandler:^{
    //Completion Code
    NSLog(@"Completed");
  }];