| // 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.h" |
| #import "MaterialButtons+ButtonThemer.h" |
| #import "MaterialButtons+ColorThemer.h" |
| #import "MaterialButtons+TypographyThemer.h" |
| #import "MaterialShapes.h" |
| #import "MaterialShapeLibrary.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] init]; |
| } |
| return self; |
| } |
| |
| - (MDCButton *)buildCustomStrokedButton { |
| 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]; |
| |
| MDCButtonScheme *buttonScheme = [[MDCButtonScheme alloc] init]; |
| buttonScheme.colorScheme = self.colorScheme; |
| buttonScheme.typographyScheme = self.typographyScheme; |
| |
| // Raised button |
| |
| MDCButton *containedButton = [[MDCButton alloc] init]; |
| [containedButton setTitle:@"Add To Cart" forState:UIControlStateNormal]; |
| [MDCContainedButtonThemer applyScheme:buttonScheme toButton:containedButton]; |
| |
| 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:@"Disabled" forState:UIControlStateNormal]; |
| [MDCContainedButtonThemer applyScheme:buttonScheme toButton:disabledContainedButton]; |
| |
| 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]; |
| [MDCTextButtonThemer applyScheme:buttonScheme toButton:flatButton]; |
| |
| MDCPillShapeGenerator *flatShapeGenerator = [[MDCPillShapeGenerator alloc] init]; |
| flatButton.shapeGenerator = flatShapeGenerator; |
| |
| [flatButton sizeToFit]; |
| [flatButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:flatButton]; |
| |
| // Custom stroked button |
| |
| MDCButton *strokedButton = [self buildCustomStrokedButton]; |
| [strokedButton setTitle:@"Button" forState:UIControlStateNormal]; |
| [MDCButtonTypographyThemer applyTypographyScheme:self.typographyScheme toButton:strokedButton]; |
| [MDCButtonColorThemer applySemanticColorScheme:self.colorScheme toButton:strokedButton]; |
| |
| MDCSlantedRectShapeGenerator *strokedShapeGenerator = |
| [[MDCSlantedRectShapeGenerator alloc] init]; |
| strokedShapeGenerator.slant = 10; |
| strokedButton.shapeGenerator = strokedShapeGenerator; |
| |
| [strokedButton sizeToFit]; |
| [strokedButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:strokedButton]; |
| |
| // Disabled custom stroked button |
| |
| MDCButton *disabledStrokedButton = [self buildCustomStrokedButton]; |
| [disabledStrokedButton setTitle:@"Button" forState:UIControlStateNormal]; |
| [MDCButtonTypographyThemer applyTypographyScheme:self.typographyScheme |
| toButton:disabledStrokedButton]; |
| [MDCButtonColorThemer applySemanticColorScheme:self.colorScheme |
| toButton:disabledStrokedButton]; |
| |
| MDCRectangleShapeGenerator *disabledStrokedShapeGenerator = |
| [[MDCRectangleShapeGenerator alloc] init]; |
| [disabledStrokedShapeGenerator setTopEdge: |
| [[MDCTriangleEdgeTreatment alloc] initWithSize:5 style:MDCTriangleEdgeStyleCut]]; |
| [disabledStrokedShapeGenerator setTopLeftCorner:[[MDCCutCornerTreatment alloc] initWithCut:10]]; |
| [disabledStrokedShapeGenerator setTopRightCorner: |
| [[MDCCurvedCornerTreatment alloc] initWithSize:CGSizeMake(5, 20)]]; |
| [disabledStrokedShapeGenerator setBottomEdge: |
| [[MDCTriangleEdgeTreatment alloc] initWithSize:5 style:MDCTriangleEdgeStyleHandle]]; |
| [disabledStrokedShapeGenerator setBottomRightCorner: |
| [[MDCCutCornerTreatment alloc] initWithCut:5]]; |
| [disabledStrokedShapeGenerator setBottomLeftCorner: |
| [[MDCCurvedCornerTreatment alloc] initWithSize:CGSizeMake(10, 5)]]; |
| disabledStrokedButton.shapeGenerator = disabledStrokedShapeGenerator; |
| |
| [disabledStrokedButton sizeToFit]; |
| [disabledStrokedButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [disabledStrokedButton setEnabled:NO]; |
| [self.view addSubview:disabledStrokedButton]; |
| |
| // 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 sizeToFit]; |
| |
| MDCRectangleShapeGenerator *floatingShapeGenerator = [[MDCRectangleShapeGenerator alloc] init]; |
| [floatingShapeGenerator |
| setCorners:[[MDCCutCornerTreatment alloc] |
| initWithCut:CGRectGetWidth(self.floatingButton.bounds) / 2]]; |
| self.floatingButton.shapeGenerator = floatingShapeGenerator; |
| [MDCFloatingActionButtonThemer applyScheme:buttonScheme toButton:self.floatingButton]; |
| |
| [self.floatingButton addTarget:self |
| action:@selector(didTap:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:self.floatingButton]; |
| |
| self.buttons = @[ |
| containedButton, disabledContainedButton, flatButton, strokedButton, |
| disabledStrokedButton, 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 *strokedButtonLabel = [self addLabelWithText:@"Stroked: Triangular"]; |
| UILabel *disabledStrokedButtonLabel = [self addLabelWithText:@"Stroked Disabled: Freeform"]; |
| UILabel *floatingDiamondLabel = [self addLabelWithText:@"Floating Action: Diamond"]; |
| |
| self.labels = @[ |
| raisedButtonLabel, disabledRaisedButtonLabel, flatButtonLabel, strokedButtonLabel, |
| disabledStrokedButtonLabel, 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 |