blob: 341fbccff4db5efe28a5812b450c1f2ea83bf471 [file] [log] [blame] [edit]
// Copyright 2017-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+Theming.h"
#import "MaterialChips.h"
#import "MaterialSlider.h"
#import "supplemental/ChipsExampleAssets.h"
#import "MaterialContainerScheme.h"
@interface ChipsSizingExampleViewController : UIViewController <MDCSliderDelegate>
@property(nonatomic, strong) id<MDCContainerScheming> containerScheme;
@property(nonatomic, strong) MDCChipView *chipView;
@property(nonatomic, strong) MDCSlider *widthSlider;
@property(nonatomic, strong) MDCSlider *heightSlider;
@property(nonatomic, strong) UISegmentedControl *horizontalAlignmentControl;
@end
@implementation ChipsSizingExampleViewController
- (id)init {
self = [super init];
if (self) {
_containerScheme = [[MDCContainerScheme alloc] init];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.chipView = [[MDCChipView alloc] init];
self.chipView.titleLabel.text = @"Material";
self.chipView.imageView.image = ChipsExampleAssets.faceImage;
self.chipView.accessoryView = ChipsExampleAssets.deleteButton;
[self.chipView applyThemeWithScheme:self.containerScheme];
[self.view addSubview:self.chipView];
CGSize chipSize = [self.chipView sizeThatFits:self.view.bounds.size];
self.chipView.frame = (CGRect){CGPointMake(20, 20), chipSize};
self.widthSlider = [[MDCSlider alloc] initWithFrame:CGRectZero];
self.widthSlider.maximumValue = 200;
self.widthSlider.value = self.chipView.frame.size.width;
self.widthSlider.accessibilityLabel = @"Width of the chip";
self.widthSlider.delegate = self;
[self.widthSlider addTarget:self
action:@selector(widthSliderChanged:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.widthSlider];
self.heightSlider = [[MDCSlider alloc] initWithFrame:CGRectZero];
self.heightSlider.maximumValue = 100;
self.heightSlider.value = self.chipView.frame.size.height;
self.heightSlider.accessibilityLabel = @"Height of the chip";
self.heightSlider.delegate = self;
[self.heightSlider addTarget:self
action:@selector(heightSliderChanged:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.heightSlider];
self.horizontalAlignmentControl =
[[UISegmentedControl alloc] initWithItems:@[ @"Default", @"Centered" ]];
self.horizontalAlignmentControl.selectedSegmentIndex = 0;
[self.horizontalAlignmentControl addTarget:self
action:@selector(horizontalAlignmentChanged:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.horizontalAlignmentControl];
}
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
CGFloat topEdge;
if (@available(iOS 11, *)) {
topEdge = self.view.safeAreaInsets.top;
} else {
topEdge = self.topLayoutGuide.length;
}
CGRect frame = self.chipView.frame;
frame.origin.y = topEdge + 16;
self.chipView.frame = frame;
CGFloat contentBottomEdge = CGRectGetMaxY(self.chipView.frame);
CGSize sliderSize = [self.widthSlider sizeThatFits:self.view.bounds.size];
self.widthSlider.frame =
CGRectMake(20, contentBottomEdge + 16, self.view.bounds.size.width - 40, sliderSize.height);
contentBottomEdge = CGRectGetMaxY(self.widthSlider.frame);
self.heightSlider.frame =
CGRectMake(20, contentBottomEdge + 16, self.view.bounds.size.width - 40, sliderSize.height);
contentBottomEdge = CGRectGetMaxY(self.heightSlider.frame);
self.horizontalAlignmentControl.frame =
CGRectMake(20, contentBottomEdge + 16, self.view.bounds.size.width - 40,
self.horizontalAlignmentControl.frame.size.height);
}
- (void)widthSliderChanged:(MDCSlider *)slider {
CGRect frame = self.chipView.frame;
frame.size.width = slider.value;
self.chipView.frame = frame;
[self.chipView layoutIfNeeded];
}
- (void)heightSliderChanged:(MDCSlider *)slider {
CGRect frame = self.chipView.frame;
frame.size.height = slider.value;
self.chipView.frame = frame;
[self.chipView layoutIfNeeded];
// The vertical layout changes when this slider is adjusted.
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
}
- (void)horizontalAlignmentChanged:(UISegmentedControl *)segmentedControl {
UIControlContentHorizontalAlignment alignment = (segmentedControl.selectedSegmentIndex == 0)
? UIControlContentHorizontalAlignmentFill
: UIControlContentHorizontalAlignmentCenter;
self.chipView.contentHorizontalAlignment = alignment;
[self.chipView layoutIfNeeded];
}
#pragma mark - MDCSliderDelegate
- (NSString *)slider:(MDCSlider *)slider accessibilityLabelForValue:(CGFloat)value {
if (slider == self.widthSlider) {
return [NSString stringWithFormat:@"Width of %@", @((NSInteger)slider.value)];
} else if (slider == self.heightSlider) {
return [NSString stringWithFormat:@"Height of %@", @((NSInteger)slider.value)];
}
return nil;
}
@end
@implementation ChipsSizingExampleViewController (CatalogByConvention)
+ (NSDictionary *)catalogMetadata {
return @{
@"breadcrumbs" : @[ @"Chips", @"Sizing" ],
@"primaryDemo" : @NO,
@"presentable" : @NO,
};
}
@end