| // Copyright 2015-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 <QuartzCore/QuartzCore.h> | |
| #import <UIKit/UIKit.h> | |
| // TODO(b/151929968): Delete import of delegate headers when client code has been migrated to no | |
| // longer import delegates as transitive dependencies. | |
| #import "MDCInkLayerDelegate.h" | |
| @protocol MDCInkLayerDelegate; | |
| /** | |
| A Core Animation layer that draws and animates the ink effect. | |
| Quick summary of how the ink ripple works: | |
| 1. On touch down, ink spreads from the touch point. | |
| 2. On touch down hold, ink continues to spread, but will gravitate to the center point | |
| of the view. | |
| 3. On touch up, the ink ripple opacity will start to decrease. | |
| */ | |
| @interface MDCInkLayer : CAShapeLayer | |
| /** | |
| Ink layer animation delegate. Clients set this delegate to receive updates when ink layer | |
| animations start and end. | |
| */ | |
| @property(nonatomic, weak, nullable) id<MDCInkLayerDelegate> animationDelegate; | |
| /** | |
| The start ink ripple spread animation has started and is active. | |
| */ | |
| @property(nonatomic, assign, readonly, getter=isStartAnimationActive) BOOL startAnimationActive; | |
| /** | |
| Delay time in milliseconds before the end ink ripple spread animation begins. | |
| */ | |
| @property(nonatomic, assign) CGFloat endAnimationDelay; | |
| /** | |
| The radius the ink ripple grows to when ink ripple ends. | |
| Default value is half the diagonal of the containing frame plus 10pt. | |
| */ | |
| @property(nonatomic, assign) CGFloat finalRadius; | |
| /** | |
| The radius the ink ripple starts to grow from when the ink ripple begins. | |
| Default value is half the diagonal of the containing frame multiplied by 0.6. | |
| */ | |
| @property(nonatomic, assign) CGFloat initialRadius; | |
| /** | |
| Maximum radius of the ink. If this is not set then the final radius value is used. | |
| */ | |
| @property(nonatomic, assign) CGFloat maxRippleRadius; | |
| /** | |
| The color of the ink ripple. | |
| */ | |
| @property(nonatomic, strong, nonnull) UIColor *inkColor; | |
| /** | |
| Starts the ink ripple animation at a specified point. | |
| */ | |
| - (void)startAnimationAtPoint:(CGPoint)point; | |
| /** | |
| Starts the ink ripple | |
| @param point the point where to start the ink ripple | |
| @param animated if to animate the ripple or not | |
| */ | |
| - (void)startInkAtPoint:(CGPoint)point animated:(BOOL)animated; | |
| /** | |
| Changes the opacity of the ink ripple depending on if touch point is contained within or | |
| outside of the ink layer. | |
| */ | |
| - (void)changeAnimationAtPoint:(CGPoint)point; | |
| /** | |
| Ends the ink ripple animation. | |
| */ | |
| - (void)endAnimationAtPoint:(CGPoint)point; | |
| /** | |
| Ends the ink ripple | |
| @param point the point where to end the ink ripple | |
| @param animated if to animate the ripple or not | |
| */ | |
| - (void)endInkAtPoint:(CGPoint)point animated:(BOOL)animated; | |
| @end |