// 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 "MaterialChips.h" #import "MaterialChips+Theming.h" #import "MaterialShapeLibrary.h" #import "MaterialShapes.h" #import "MaterialSlider+ColorThemer.h" #import "MaterialSlider.h" #import "MaterialColorScheme.h" #import "MaterialContainerScheme.h" #import "supplemental/ChipsExampleAssets.h" @interface ChipsShapingExampleViewController : UIViewController @property(nonatomic, strong) MDCChipView *chipView; @property(nonatomic, strong) MDCSlider *cornerSlider; @property(nonatomic, strong) MDCRectangleShapeGenerator *rectangleShapeGenerator; @property(nonatomic, strong) UISegmentedControl *cornerStyleControl; @property(nonatomic, strong) id containerScheme; @end @implementation ChipsShapingExampleViewController - (id)init { self = [super init]; if (self) { _containerScheme = [[MDCContainerScheme alloc] init]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; self.rectangleShapeGenerator = [[MDCRectangleShapeGenerator alloc] init]; self.chipView = [[MDCChipView alloc] init]; self.chipView.titleLabel.text = @"Material"; self.chipView.imageView.image = ChipsExampleAssets.faceImage; self.chipView.accessoryView = ChipsExampleAssets.deleteButton; self.chipView.imagePadding = UIEdgeInsetsMake(0, 10, 0, 0); self.chipView.accessoryPadding = UIEdgeInsetsMake(0, 0, 0, 10); CGSize chipSize = [self.chipView sizeThatFits:self.view.bounds.size]; self.chipView.frame = CGRectMake(20, 20, chipSize.width + 20, chipSize.height + 20); [self.chipView applyThemeWithScheme:self.containerScheme]; self.chipView.shapeGenerator = self.rectangleShapeGenerator; [self.view addSubview:self.chipView]; self.cornerSlider = [[MDCSlider alloc] initWithFrame:CGRectZero]; self.cornerSlider.maximumValue = MIN(CGRectGetWidth(self.chipView.bounds), CGRectGetHeight(self.chipView.bounds)) / 2; self.cornerSlider.value = self.cornerSlider.maximumValue / 2; [self.cornerSlider addTarget:self action:@selector(cornerSliderChanged:) forControlEvents:UIControlEventValueChanged]; if (self.containerScheme.colorScheme) { [MDCSliderColorThemer applySemanticColorScheme:self.containerScheme.colorScheme toSlider:self.cornerSlider]; } else { MDCSemanticColorScheme *colorScheme = [[MDCSemanticColorScheme alloc] initWithDefaults:MDCColorSchemeDefaultsMaterial201804]; [MDCSliderColorThemer applySemanticColorScheme:colorScheme toSlider:self.cornerSlider]; } [self.view addSubview:self.cornerSlider]; self.cornerStyleControl = [[UISegmentedControl alloc] initWithItems:@[ @"Rounded", @"Cut", @"None" ]]; self.cornerStyleControl.selectedSegmentIndex = 0; [self.cornerStyleControl addTarget:self action:@selector(cornerStyleChanged:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:self.cornerStyleControl]; } - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; CGSize sliderSize = [self.cornerSlider sizeThatFits:self.view.bounds.size]; self.cornerSlider.frame = CGRectMake(20, 140, self.view.bounds.size.width - 40, sliderSize.height); self.cornerSlider.frame = CGRectMake(20, 140 + sliderSize.height + 20, self.view.bounds.size.width - 40, sliderSize.height); self.cornerStyleControl.frame = CGRectMake(20, CGRectGetMaxY(self.cornerSlider.frame) + 20, self.view.bounds.size.width - 40, self.cornerStyleControl.frame.size.height); [self cornerSliderChanged:self.cornerSlider]; } - (void)cornerSliderChanged:(MDCSlider *)slider { if (self.cornerStyleControl.selectedSegmentIndex == 0) { // Rounded MDCRoundedCornerTreatment *roundedCorners = [[MDCRoundedCornerTreatment alloc] initWithRadius:slider.value]; [self.rectangleShapeGenerator setCorners:roundedCorners]; } else if (self.cornerStyleControl.selectedSegmentIndex == 1) { // Cut MDCCutCornerTreatment *cutCorners = [[MDCCutCornerTreatment alloc] initWithCut:slider.value]; [self.rectangleShapeGenerator setCorners:cutCorners]; } [self.chipView setNeedsLayout]; } - (void)cornerStyleChanged:(UISegmentedControl *)segmentedControl { if (segmentedControl.selectedSegmentIndex == 2) { self.chipView.shapeGenerator = nil; self.cornerSlider.hidden = YES; } else { self.chipView.shapeGenerator = self.rectangleShapeGenerator; self.cornerSlider.hidden = NO; } self.cornerSlider.value = self.cornerSlider.maximumValue / 2; [self cornerSliderChanged:self.cornerSlider]; } @end @implementation ChipsShapingExampleViewController (CatalogByConvention) + (NSDictionary *)catalogMetadata { return @{ @"breadcrumbs" : @[ @"Chips", @"Shaped Chip" ], @"primaryDemo" : @NO, @"presentable" : @NO, }; } @end