| /* |
| 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 "AnimationTimingExampleSupplemental.h" |
| |
| #import "MaterialTypography.h" |
| |
| const CGFloat kTopMargin = 16.f; |
| const CGFloat kLeftGutter = 16.f; |
| const CGFloat kTextOffset = 16.f; |
| |
| // Size of the circle we animate. |
| static const CGSize kAnimationCircleSize = {48.f, 48.f}; |
| |
| @implementation AnimationTimingExample (CatalogByConvention) |
| |
| + (NSArray *)catalogBreadcrumbs { |
| return @[ @"Animation Timing", @"Animation Timing" ]; |
| } |
| |
| + (NSString *)catalogDescription { |
| return @"Animation timing easing curves create smooth and consistent motion. Easing curves allow" |
| " elements to move between positions or states."; |
| } |
| |
| + (BOOL)catalogIsPrimaryDemo { |
| return YES; |
| } |
| |
| + (BOOL)catalogIsPresentable { |
| return YES; |
| } |
| |
| |
| @end |
| |
| @implementation AnimationTimingExample (Supplemental) |
| |
| - (void)setupExampleViews { |
| self.view.backgroundColor = UIColor.whiteColor; |
| self.title = @"Animation Timing"; |
| |
| self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; |
| self.scrollView.autoresizingMask = |
| UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
| |
| self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.view.frame), |
| CGRectGetHeight(self.view.frame) + kTopMargin); |
| self.scrollView.clipsToBounds = YES; |
| [self.view addSubview:self.scrollView]; |
| |
| CGFloat lineSpace = (CGRectGetHeight(self.view.frame) - 50.f) / 5.f; |
| UILabel *linearLabel = [AnimationTimingExample curveLabelWithTitle:@"Linear"]; |
| linearLabel.frame = |
| CGRectMake(kLeftGutter, kTopMargin, linearLabel.frame.size.width, linearLabel.frame.size.height); |
| [self.scrollView addSubview:linearLabel]; |
| |
| CGRect linearViewFrame = |
| CGRectMake(kLeftGutter, kTextOffset + kTopMargin, kAnimationCircleSize.width, kAnimationCircleSize.height); |
| self.linearView = [[UIView alloc] initWithFrame:linearViewFrame]; |
| self.linearView.backgroundColor = [AnimationTimingExample defaultColors][0]; |
| self.linearView.layer.cornerRadius = kAnimationCircleSize.width / 2.f; |
| [self.scrollView addSubview:self.linearView]; |
| |
| UILabel *materialEaseInOutLabel = |
| [AnimationTimingExample curveLabelWithTitle:@"MDCAnimationTimingFunctionStandard"]; |
| materialEaseInOutLabel.frame = |
| CGRectMake(kLeftGutter, lineSpace, materialEaseInOutLabel.frame.size.width, |
| materialEaseInOutLabel.frame.size.height); |
| [self.scrollView addSubview:materialEaseInOutLabel]; |
| |
| CGRect materialEaseInOutViewFrame = |
| CGRectMake(kLeftGutter, lineSpace + kTextOffset, kAnimationCircleSize.width, |
| kAnimationCircleSize.height); |
| self.materialStandardView = [[UIView alloc] initWithFrame:materialEaseInOutViewFrame]; |
| self.materialStandardView.backgroundColor = [AnimationTimingExample defaultColors][1]; |
| self.materialStandardView.layer.cornerRadius = kAnimationCircleSize.width / 2.f; |
| [self.scrollView addSubview:self.materialStandardView]; |
| |
| UILabel *materialEaseOutLabel = |
| [AnimationTimingExample curveLabelWithTitle:@"MDCAnimationTimingFunctionDeceleration"]; |
| materialEaseOutLabel.frame = |
| CGRectMake(kLeftGutter, lineSpace * 2.f, materialEaseOutLabel.frame.size.width, |
| materialEaseOutLabel.frame.size.height); |
| [self.scrollView addSubview:materialEaseOutLabel]; |
| |
| CGRect materialDecelerationViewFrame = |
| CGRectMake(kLeftGutter, lineSpace * 2.f + kTextOffset, kAnimationCircleSize.width, |
| kAnimationCircleSize.height); |
| self.materialDecelerationView = [[UIView alloc] initWithFrame:materialDecelerationViewFrame]; |
| self.materialDecelerationView.backgroundColor = [AnimationTimingExample defaultColors][2]; |
| self.materialDecelerationView.layer.cornerRadius = kAnimationCircleSize.width / 2.f; |
| [self.scrollView addSubview:self.materialDecelerationView]; |
| |
| UILabel *materialEaseInLabel = |
| [AnimationTimingExample curveLabelWithTitle:@"MDCAnimationTimingFunctionAcceleration"]; |
| materialEaseInLabel.frame = |
| CGRectMake(kLeftGutter, lineSpace * 3.f, materialEaseInLabel.frame.size.width, |
| materialEaseInLabel.frame.size.height); |
| [self.scrollView addSubview:materialEaseInLabel]; |
| |
| CGRect materialAccelerationViewFrame = |
| CGRectMake(kLeftGutter, lineSpace * 3.f + kTextOffset, kAnimationCircleSize.width, |
| kAnimationCircleSize.height); |
| self.materialAccelerationView = [[UIView alloc] initWithFrame:materialAccelerationViewFrame]; |
| self.materialAccelerationView.backgroundColor = [AnimationTimingExample defaultColors][3]; |
| self.materialAccelerationView.layer.cornerRadius = kAnimationCircleSize.width / 2.f; |
| [self.scrollView addSubview:self.materialAccelerationView]; |
| |
| UILabel *materialSharpLabel = |
| [AnimationTimingExample curveLabelWithTitle:@"MDCAnimationTimingFunctionSharp"]; |
| materialSharpLabel.frame = |
| CGRectMake(kLeftGutter, lineSpace * 4.f, CGRectGetWidth(materialSharpLabel.frame), |
| CGRectGetHeight(materialSharpLabel.frame)); |
| [self.scrollView addSubview:materialSharpLabel]; |
| |
| CGRect materialSharpViewFrame = CGRectMake(kLeftGutter, lineSpace * 4.f + kTextOffset, kAnimationCircleSize.width, kAnimationCircleSize.height); |
| self.materialSharpView = [[UIView alloc] initWithFrame:materialSharpViewFrame]; |
| self.materialSharpView.backgroundColor = [AnimationTimingExample defaultColors][4]; |
| self.materialSharpView.layer.cornerRadius = kAnimationCircleSize.width / 2.f; |
| [self.scrollView addSubview:self.materialSharpView]; |
| } |
| |
| + (UILabel *)curveLabelWithTitle:(NSString *)text { |
| UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; |
| label.font = [MDCTypography captionFont]; |
| label.textColor = [UIColor colorWithWhite:0 alpha:[MDCTypography body2FontOpacity]]; |
| label.text = text; |
| [label sizeToFit]; |
| return label; |
| } |
| |
| + (NSArray<UIColor *> *)defaultColors { |
| static NSArray *defaultColors; |
| static dispatch_once_t onceToken; |
| dispatch_once(&onceToken, ^{ |
| UIColor *primaryColor = [UIColor darkGrayColor]; |
| defaultColors = @[ |
| [primaryColor colorWithAlphaComponent:0.95f], |
| [primaryColor colorWithAlphaComponent:0.90f], |
| [primaryColor colorWithAlphaComponent:0.85f], |
| [primaryColor colorWithAlphaComponent:0.80f], |
| [primaryColor colorWithAlphaComponent:0.75f] |
| ]; |
| }); |
| return defaultColors; |
| } |
| |
| @end |