// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_SHARED_UI_UTIL_ANIMATION_UTIL_H_
#define IOS_CHROME_BROWSER_SHARED_UI_UTIL_ANIMATION_UTIL_H_
#import <UIKit/UIKit.h>
// Animations returned by these utility methods use kCAFillModeBoth and aren't
// automatically removed from the layer when finished. Remove the animations
// by calling `RemoveAnimationsFromLayers` in CATransaction completion blocks.
// This is done so the effects of animations that finish earlier persist until
// all animations in the transaction are finished.
// Returns an animation that will animate `layer` from `beginFrame` to
// `endFrame`.
CAAnimation* FrameAnimationMake(CALayer* layer,
CGRect beginFrame,
CGRect endFrame);
// Returns an animation that will animate the "opacity" property of a layer from
// `beginOpacity` to `endOpacity`.
CAAnimation* OpacityAnimationMake(CGFloat beginOpacity, CGFloat endOpacity);
// Returns an animation group containing the animations in `animations` that has
// the shortest duration necessary for all the animations to finish.
CAAnimation* AnimationGroupMake(NSArray* animations);
// Returns an animation that performs `animation` after `delay`.
CAAnimation* DelayedAnimationMake(CAAnimation* animation, CFTimeInterval delay);
// If `animation` is a CAAnimationGroup, searches its animations for a
// CABasicAnimation for `keyPath`. If `animation` is a CABasicAnimation, it
// will check its keyPath against `keyPath`.
CABasicAnimation* FindAnimationForKeyPath(NSString* keyPath,
CAAnimation* animation);
// Removes the animation for `key` from each CALayer in `layers`.
void RemoveAnimationForKeyFromLayers(NSString* key, NSArray* layers);
#endif // IOS_CHROME_BROWSER_SHARED_UI_UTIL_ANIMATION_UTIL_H_