How would I do this iOS animation on OSX?

后端 未结 2 1123
再見小時候
再見小時候 2020-12-15 05:00

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 straigh

相关标签:
2条回答
  • 2020-12-15 05:19

    You can use:

      [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
        [context setDuration:2.0];
        //Animation code
      } completionHandler:^{
        //Completion Code
        NSLog(@"Completed");
      }];
    
    0 讨论(0)
  • 2020-12-15 05:22

    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
    
    0 讨论(0)
提交回复
热议问题