| // Copyright 2016-present the Material Components for iOS authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #import <UIKit/UIKit.h> |
| |
| /** |
| Protocol representing a single overlay on the screen. |
| */ |
| @protocol MDCOverlay <NSObject> |
| |
| /** |
| A unique identifier for the overlay. Opaque. |
| */ |
| @property(nonatomic, readonly, copy) NSString *identifier; |
| |
| /** |
| The frame of the overlay, in screen coordinates. |
| */ |
| @property(nonatomic, readonly) CGRect frame; |
| |
| @end |
| |
| /** |
| Protocol representing a change in the overlays currently on screen. |
| */ |
| @protocol MDCOverlayTransitioning <NSObject> |
| |
| /** |
| The duration of the animation used to change the overlay frames. |
| |
| A duration of 0 means the transition is not animated. |
| */ |
| @property(nonatomic, readonly) NSTimeInterval duration; |
| |
| /** |
| If animated, the timing function that should be used when animating the overlay frame change. |
| |
| If @c duration is 0, this value is undefined. |
| */ |
| @property(nonatomic, readonly) CAMediaTimingFunction *customTimingFunction; |
| |
| /** |
| If animated, the curve that should be used when animating the overlay frame change. |
| |
| If @c duration is 0, or if @c customTimingFunction is non-nil, then this value is undefined. |
| */ |
| @property(nonatomic, readonly) UIViewAnimationCurve animationCurve; |
| |
| /** |
| The union of the frames for every overlay currently on screen, in screen coordinates. |
| |
| This frame is the smallest frame which encompasses all of the overlays currently on screen. |
| |
| @note This is generally the frame you want, but it can be "greedy" in that the reported frame may |
| not be the most accurate reflection of the overlays on screen. Imagine an overlay that is |
| half the screen's width above a full-width view. The resulting composite frame will be the |
| full width of the screen plus the height of the two views. |
| */ |
| @property(nonatomic, readonly) CGRect compositeFrame; |
| |
| /** |
| The value of @c compositeFrame in @c targetView's coordinate space. |
| |
| The result may go outside of the bounds of @c targetView. |
| */ |
| - (CGRect)compositeFrameInView:(UIView *)targetView; |
| |
| /** |
| Enumerates through each overlay on the screen, calling @c handler for each one. |
| */ |
| - (void)enumerateOverlays:(void (^)(id<MDCOverlay> overlay, NSUInteger idx, BOOL *stop))handler; |
| |
| /** |
| Runs @c animations alongside the overlay transition animation. |
| */ |
| - (void)animateAlongsideTransition:(void (^)(void))animations; |
| |
| /** |
| Runs @c animations alongside the overlay transition animation, calling @c completion when the |
| animation is finished. |
| |
| @note Any curves specified in @c options will be ignored. |
| */ |
| - (void)animateAlongsideTransitionWithOptions:(UIViewAnimationOptions)options |
| animations:(void (^)(void))animations |
| completion:(void (^)(BOOL finished))completion; |
| |
| @end |