| // Copyright 2018-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 "MaterialButtons+Theming.h" |
| #import "MaterialButtons.h" |
| #import "MaterialContainerScheme.h" |
| #import "MaterialShapeLibrary.h" |
| #import "MaterialShapes.h" |
| #import "MaterialTypography.h" |
| |
| #import "supplemental/ButtonsTypicalUseSupplemental.h" |
| |
| @interface ButtonsShapesExampleViewController () |
| @property(nonatomic, strong) MDCFloatingButton *floatingButton; |
| @end |
| |
| @implementation ButtonsShapesExampleViewController |
| |
| - (id)init { |
| self = [super init]; |
| if (self) { |
| self.colorScheme = |
| [[MDCSemanticColorScheme alloc] initWithDefaults:MDCColorSchemeDefaultsMaterial201804]; |
| self.typographyScheme = |
| [[MDCTypographyScheme alloc] initWithDefaults:MDCTypographySchemeDefaultsMaterial201804]; |
| self.containerScheme = [[MDCContainerScheme alloc] init]; |
| self.containerScheme.colorScheme = self.colorScheme; |
| self.containerScheme.shapeScheme = |
| [[MDCShapeScheme alloc] initWithDefaults:MDCShapeSchemeDefaultsMaterial201809]; |
| self.containerScheme.typographyScheme = self.typographyScheme; |
| } |
| return self; |
| } |
| |
| - (MDCButton *)buildCustomOutlinedButton { |
| MDCButton *button = [[MDCButton alloc] init]; |
| [button setBorderWidth:1.0 forState:UIControlStateNormal]; |
| [button setBorderColor:[UIColor colorWithWhite:(CGFloat)0.1 alpha:1] |
| forState:UIControlStateNormal]; |
| return button; |
| } |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| |
| self.view.backgroundColor = [UIColor colorWithWhite:(CGFloat)0.9 alpha:1]; |
| UIColor *titleColor = [UIColor whiteColor]; |
| |
| // Raised button |
| |
| MDCButton *containedButton = [[MDCButton alloc] init]; |
| [containedButton setTitle:@"Add To Cart" forState:UIControlStateNormal]; |
| [containedButton applyContainedThemeWithScheme:self.containerScheme]; |
| |
| UIImage *plusImage = [UIImage imageNamed:@"Plus"]; |
| plusImage = [plusImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; |
| [containedButton setImage:plusImage forState:UIControlStateNormal]; |
| |
| MDCRectangleShapeGenerator *raisedShapeGenerator = [[MDCRectangleShapeGenerator alloc] init]; |
| [raisedShapeGenerator setCorners:[[MDCCutCornerTreatment alloc] initWithCut:8]]; |
| containedButton.shapeGenerator = raisedShapeGenerator; |
| |
| [containedButton sizeToFit]; |
| [containedButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:containedButton]; |
| |
| // Disabled raised button |
| |
| MDCButton *disabledContainedButton = [[MDCButton alloc] init]; |
| [disabledContainedButton setTitle:@"Curved Cut" forState:UIControlStateNormal]; |
| [disabledContainedButton applyContainedThemeWithScheme:self.containerScheme]; |
| |
| MDCRectangleShapeGenerator *disabledRaisedShapeGenerator = |
| [[MDCRectangleShapeGenerator alloc] init]; |
| MDCCurvedCornerTreatment *curvedCorners = [[MDCCurvedCornerTreatment alloc] init]; |
| curvedCorners.size = CGSizeMake(10, 30); |
| [disabledRaisedShapeGenerator setCorners:curvedCorners]; |
| disabledContainedButton.shapeGenerator = disabledRaisedShapeGenerator; |
| |
| [disabledContainedButton sizeToFit]; |
| [disabledContainedButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [disabledContainedButton setEnabled:NO]; |
| [self.view addSubview:disabledContainedButton]; |
| |
| // Flat button |
| |
| MDCButton *flatButton = [[MDCButton alloc] init]; |
| [flatButton setTitle:@"Oval Flat" forState:UIControlStateNormal]; |
| [flatButton applyTextThemeWithScheme:self.containerScheme]; |
| |
| MDCPillShapeGenerator *flatShapeGenerator = [[MDCPillShapeGenerator alloc] init]; |
| flatButton.shapeGenerator = flatShapeGenerator; |
| |
| [flatButton sizeToFit]; |
| [flatButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:flatButton]; |
| |
| // Custom outlined button |
| |
| MDCButton *outlinedButton = [self buildCustomOutlinedButton]; |
| [outlinedButton setTitle:@"Triangular" forState:UIControlStateNormal]; |
| [outlinedButton applyOutlinedThemeWithScheme:self.containerScheme]; |
| |
| MDCSlantedRectShapeGenerator *outlinedShapeGenerator = |
| [[MDCSlantedRectShapeGenerator alloc] init]; |
| outlinedShapeGenerator.slant = 10; |
| outlinedButton.shapeGenerator = outlinedShapeGenerator; |
| |
| [outlinedButton sizeToFit]; |
| [outlinedButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:outlinedButton]; |
| |
| // Disabled custom outlined button |
| |
| MDCButton *disabledOutlinedButton = [self buildCustomOutlinedButton]; |
| [disabledOutlinedButton setTitle:@"Freeform" forState:UIControlStateNormal]; |
| [disabledOutlinedButton applyOutlinedThemeWithScheme:self.containerScheme]; |
| |
| MDCRectangleShapeGenerator *disabledOutlinedShapeGenerator = |
| [[MDCRectangleShapeGenerator alloc] init]; |
| [disabledOutlinedShapeGenerator |
| setTopEdge:[[MDCTriangleEdgeTreatment alloc] initWithSize:5 style:MDCTriangleEdgeStyleCut]]; |
| [disabledOutlinedShapeGenerator setTopLeftCorner:[[MDCCutCornerTreatment alloc] initWithCut:10]]; |
| [disabledOutlinedShapeGenerator |
| setTopRightCorner:[[MDCCurvedCornerTreatment alloc] initWithSize:CGSizeMake(5, 20)]]; |
| [disabledOutlinedShapeGenerator |
| setBottomEdge:[[MDCTriangleEdgeTreatment alloc] initWithSize:5 |
| style:MDCTriangleEdgeStyleHandle]]; |
| [disabledOutlinedShapeGenerator |
| setBottomRightCorner:[[MDCCutCornerTreatment alloc] initWithCut:5]]; |
| [disabledOutlinedShapeGenerator |
| setBottomLeftCorner:[[MDCCurvedCornerTreatment alloc] initWithSize:CGSizeMake(10, 5)]]; |
| disabledOutlinedButton.shapeGenerator = disabledOutlinedShapeGenerator; |
| |
| [disabledOutlinedButton sizeToFit]; |
| [disabledOutlinedButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [disabledOutlinedButton setEnabled:NO]; |
| [self.view addSubview:disabledOutlinedButton]; |
| |
| // Floating action button |
| |
| self.floatingButton = [[MDCFloatingButton alloc] init]; |
| [self.floatingButton setTitleColor:titleColor forState:UIControlStateNormal]; |
| [self.floatingButton setImageTintColor:UIColor.whiteColor forState:UIControlStateNormal]; |
| [self.floatingButton setImage:plusImage forState:UIControlStateNormal]; |
| self.floatingButton.accessibilityLabel = @"Floating Action Diamond"; |
| [self.floatingButton sizeToFit]; |
| |
| MDCRectangleShapeGenerator *floatingShapeGenerator = [[MDCRectangleShapeGenerator alloc] init]; |
| [floatingShapeGenerator |
| setCorners:[[MDCCutCornerTreatment alloc] |
| initWithCut:CGRectGetWidth(self.floatingButton.bounds) / 2]]; |
| self.floatingButton.shapeGenerator = floatingShapeGenerator; |
| [self.floatingButton applySecondaryThemeWithScheme:self.containerScheme]; |
| |
| [self.floatingButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:self.floatingButton]; |
| |
| self.buttons = @[ |
| containedButton, disabledContainedButton, flatButton, outlinedButton, disabledOutlinedButton, |
| self.floatingButton |
| ]; |
| |
| [self setupShapeExampleViews]; |
| } |
| |
| - (void)setupShapeExampleViews { |
| UILabel *raisedButtonLabel = [self addLabelWithText:@"Contained: Cut Corners"]; |
| UILabel *disabledRaisedButtonLabel = [self addLabelWithText:@"Disabled Contained: Curved Cut"]; |
| UILabel *flatButtonLabel = [self addLabelWithText:@"Flat: Oval Ink"]; |
| UILabel *outlinedButtonLabel = [self addLabelWithText:@"Outlined: Triangular"]; |
| UILabel *disabledOutlinedButtonLabel = [self addLabelWithText:@"Outlined Disabled: Freeform"]; |
| UILabel *floatingDiamondLabel = [self addLabelWithText:@"Floating Action: Diamond"]; |
| |
| self.labels = @[ |
| raisedButtonLabel, disabledRaisedButtonLabel, flatButtonLabel, outlinedButtonLabel, |
| disabledOutlinedButtonLabel, floatingDiamondLabel |
| ]; |
| } |
| |
| - (void)didTap:(id)sender { |
| NSLog(@"%@ was tapped.", NSStringFromClass([sender class])); |
| if (sender == self.floatingButton) { |
| [self.floatingButton |
| collapse:YES |
| completion:^{ |
| dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), |
| dispatch_get_main_queue(), ^{ |
| [self.floatingButton expand:YES completion:nil]; |
| }); |
| }]; |
| } |
| } |
| |
| - (void)viewWillAppear:(BOOL)animated { |
| [super viewWillAppear:animated]; |
| if (animated) { |
| [self.floatingButton collapse:NO completion:nil]; |
| } |
| } |
| |
| - (void)viewDidAppear:(BOOL)animated { |
| [super viewDidAppear:animated]; |
| if (animated) { |
| [self.floatingButton expand:YES completion:nil]; |
| } |
| } |
| |
| @end |