mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
This is a follow-up to https://github.com/material-components/material-components-ios/pull/6027 ``` find components \( -name "*.h" -or -name "*.m" \) | xargs clang-format -i ```
241 lines
9.6 KiB
Objective-C
241 lines
9.6 KiB
Objective-C
// 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+ButtonThemer.h"
|
|
#import "MaterialButtons+ColorThemer.h"
|
|
#import "MaterialButtons+Theming.h"
|
|
#import "MaterialButtons+TypographyThemer.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 *)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];
|
|
[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:@"Disabled" 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 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;
|
|
[self.floatingButton applySecondaryThemeWithScheme:self.containerScheme];
|
|
|
|
[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
|