| // Copyright 2016-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 "FeatureHighlightExampleSupplemental.h" |
| |
| #import "MaterialButtons+ButtonThemer.h" |
| #import "MaterialButtons.h" |
| #import "MaterialButtons+Theming.h" |
| #import "MaterialCollections.h" |
| #import "MaterialPalettes.h" |
| #import "MaterialTypography.h" |
| #import "MaterialMath.h" |
| #import "MaterialColorScheme.h" |
| #import "MaterialTypographyScheme.h" |
| |
| static NSString *const reuseIdentifier = @"Cell"; |
| |
| @implementation FeatureHighlightTypicalUseViewController (CatalogByConvention) |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| |
| self.view.backgroundColor = [UIColor whiteColor]; |
| MDCButtonScheme *buttonScheme = [[MDCButtonScheme alloc] init]; |
| buttonScheme.colorScheme = self.colorScheme; |
| buttonScheme.typographyScheme = self.typographyScheme; |
| |
| self.infoLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
| self.infoLabel.text = @"Tap anywhere to move the button."; |
| self.infoLabel.font = [MDCTypography subheadFont]; |
| [self.view addSubview:self.infoLabel]; |
| |
| MDCButton *button = [[MDCButton alloc] init]; |
| self.button = button; |
| [self.button setTitle:@"Feature" forState:UIControlStateNormal]; |
| [self.button sizeToFit]; |
| [self.view addSubview:self.button]; |
| |
| MDCButton *actionButton = [[MDCButton alloc] init]; |
| self.actionButton = actionButton; |
| [self.actionButton setTitle:@"Show Feature Highlight" forState:UIControlStateNormal]; |
| [self.actionButton sizeToFit]; |
| [self.actionButton addTarget:self |
| action:@selector(didTapButton:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:self.actionButton]; |
| |
| [MDCContainedButtonThemer applyScheme:buttonScheme toButton:button]; |
| [MDCContainedButtonThemer applyScheme:buttonScheme toButton:actionButton]; |
| |
| UITapGestureRecognizer *tapRecognizer = |
| [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapBackground:)]; |
| [self.view addGestureRecognizer:tapRecognizer]; |
| } |
| |
| - (void)viewDidLayoutSubviews { |
| [super viewDidLayoutSubviews]; |
| |
| [self.button sizeToFit]; |
| CGRect frame = self.button.frame; |
| frame.origin.x = self.view.frame.size.width / 2 - frame.size.width / 2; |
| frame.origin.y = self.view.frame.size.height / 2 - frame.size.height / 2; |
| self.button.frame = frame; |
| |
| [self.actionButton sizeToFit]; |
| frame = self.actionButton.frame; |
| frame.origin.x = self.view.frame.size.width / 2 - frame.size.width / 2; |
| frame.origin.y = self.view.frame.size.height - 60; |
| self.actionButton.frame = frame; |
| |
| CGSize labelSize = [self.infoLabel sizeThatFits:self.view.frame.size]; |
| self.infoLabel.frame = |
| MDCRectAlignToScale(CGRectMake(self.view.frame.size.width / 2 - labelSize.width / 2, 20, |
| labelSize.width, labelSize.height), |
| [UIScreen mainScreen].scale); |
| } |
| |
| - (void)didTapBackground:(UITapGestureRecognizer *)recognizer { |
| CGPoint location = [recognizer locationInView:recognizer.view]; |
| location.x -= self.button.frame.size.width / 2; |
| location.y -= self.button.frame.size.height / 2; |
| self.button.frame = (CGRect){location, self.button.frame.size}; |
| } |
| |
| #pragma mark - CatalogByConvention |
| |
| + (NSDictionary *)catalogMetadata { |
| return @{ |
| @"breadcrumbs" : @[ @"Feature Highlight", @"Feature Highlight" ], |
| @"description" : @"The Feature Highlight component is used to introduce users to new features " |
| @"and functionality at contextually relevant moments.", |
| @"primaryDemo" : @YES, |
| @"presentable" : @YES, |
| }; |
| } |
| |
| @end |
| |
| @implementation FeatureHighlightColorExample (CatalogByConvention) |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| |
| [self.collectionView registerClass:[MDCCollectionViewTextCell class] |
| forCellWithReuseIdentifier:reuseIdentifier]; |
| |
| self.colorNameToColorMap = @{ |
| @"Red" : MDCPalette.redPalette.tint500, |
| @"Pink" : MDCPalette.pinkPalette.tint500, |
| @"Purple" : MDCPalette.purplePalette.tint500, |
| @"Deep Purple" : MDCPalette.deepPurplePalette.tint500, |
| @"Indigo" : MDCPalette.indigoPalette.tint500, |
| @"Blue" : MDCPalette.bluePalette.tint500, |
| @"Light Blue" : MDCPalette.lightBluePalette.tint500, |
| @"Cyan" : MDCPalette.cyanPalette.tint500, |
| @"Teal" : MDCPalette.tealPalette.tint500, |
| @"Green" : MDCPalette.greenPalette.tint500, |
| @"Light Green" : MDCPalette.lightGreenPalette.tint500, |
| @"Lime" : MDCPalette.limePalette.tint500, |
| @"Yellow" : MDCPalette.yellowPalette.tint500, |
| @"Amber" : MDCPalette.amberPalette.tint500, |
| @"Orange" : MDCPalette.orangePalette.tint500, |
| @"Deep Orange" : MDCPalette.deepOrangePalette.tint500, |
| @"Brown" : MDCPalette.brownPalette.tint500, |
| @"Grey" : MDCPalette.greyPalette.tint500, |
| @"Blue Grey" : MDCPalette.blueGreyPalette.tint500, |
| }; |
| } |
| |
| - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { |
| return 1; |
| } |
| |
| - (NSInteger)collectionView:(UICollectionView *)collectionView |
| numberOfItemsInSection:(NSInteger)section { |
| return self.colorNameToColorMap.count; |
| } |
| |
| - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView |
| cellForItemAtIndexPath:(NSIndexPath *)indexPath { |
| MDCCollectionViewTextCell *cell = |
| [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier |
| forIndexPath:indexPath]; |
| |
| UIView *accessory = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; |
| NSString *colorName = self.colorNameToColorMap.allKeys[indexPath.row]; |
| accessory.backgroundColor = self.colorNameToColorMap[colorName]; |
| cell.accessibilityLabel = colorName; |
| cell.isAccessibilityElement = YES; |
| cell.accessibilityTraits = cell.accessibilityTraits | UIAccessibilityTraitButton; |
| cell.accessoryView = accessory; |
| |
| return cell; |
| } |
| |
| #pragma mark - CatalogByConvention |
| |
| + (NSDictionary *)catalogMetadata { |
| return @{ |
| @"breadcrumbs" : @[ @"Feature Highlight", @"Colors" ], |
| @"primaryDemo" : @NO, |
| @"presentable" : @NO, |
| }; |
| } |
| |
| @end |
| |
| @implementation FeatureHighlightCustomFontsExample (CatalogByConvention) |
| |
| - (void)viewDidLayoutSubviews { |
| [super viewDidLayoutSubviews]; |
| |
| [self.button sizeToFit]; |
| CGRect frame = self.button.frame; |
| frame.origin.x = self.view.frame.size.width / 2 - frame.size.width / 2; |
| frame.origin.y = self.view.frame.size.height / 2 - frame.size.height / 2; |
| self.button.frame = frame; |
| |
| CGSize labelSize = [self.infoLabel sizeThatFits:self.view.frame.size]; |
| self.infoLabel.frame = MDCRectAlignToScale( |
| CGRectMake(self.view.frame.size.width / 2 - labelSize.width / 2, |
| frame.origin.y - labelSize.height - 20, labelSize.width, labelSize.height), |
| [UIScreen mainScreen].scale); |
| } |
| |
| #pragma mark - CatalogByConvention |
| |
| + (NSDictionary *)catalogMetadata { |
| return @{ |
| @"breadcrumbs" : @[ @"Feature Highlight", @"Custom Fonts" ], |
| @"primaryDemo" : @NO, |
| @"presentable" : @NO, |
| }; |
| } |
| |
| @end |
| |
| @implementation FeatureHighlightShownViewExample (CatalogByConvention) |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| |
| self.view.backgroundColor = [UIColor whiteColor]; |
| |
| MDCButtonScheme *buttonScheme = [[MDCButtonScheme alloc] init]; |
| buttonScheme.colorScheme = self.colorScheme; |
| buttonScheme.typographyScheme = self.typographyScheme; |
| |
| MDCFloatingButton *fab = [[MDCFloatingButton alloc] init]; |
| [fab setImage:[UIImage imageNamed:@"system_icons/add"] forState:UIControlStateNormal]; |
| [fab sizeToFit]; |
| self.button = fab; |
| [self.view addSubview:self.button]; |
| |
| [fab applySecondaryThemeWithScheme:self.containerScheme]; |
| |
| MDCButton *actionButton = [[MDCButton alloc] init]; |
| self.actionButton = actionButton; |
| [self.actionButton setTitle:@"Show Feature Highlight" forState:UIControlStateNormal]; |
| [self.actionButton sizeToFit]; |
| [self.actionButton addTarget:self |
| action:@selector(didTapButton:) |
| forControlEvents:UIControlEventTouchUpInside]; |
| [self.view addSubview:self.actionButton]; |
| |
| [MDCContainedButtonThemer applyScheme:buttonScheme toButton:actionButton]; |
| } |
| |
| - (void)viewDidLayoutSubviews { |
| [super viewDidLayoutSubviews]; |
| |
| [self.button sizeToFit]; |
| CGRect frame = self.button.frame; |
| frame.origin.x = self.view.frame.size.width / 2 - frame.size.width / 2; |
| frame.origin.y = self.view.frame.size.height / 2 - frame.size.height / 2; |
| self.button.frame = frame; |
| |
| [self.actionButton sizeToFit]; |
| frame = self.actionButton.frame; |
| frame.origin.x = self.view.frame.size.width / 2 - frame.size.width / 2; |
| frame.origin.y = self.view.frame.size.height - 60; |
| self.actionButton.frame = frame; |
| } |
| |
| #pragma mark - CatalogByConvention |
| |
| + (NSDictionary *)catalogMetadata { |
| return @{ |
| @"breadcrumbs" : @[ @"Feature Highlight", @"Shown Views" ], |
| @"primaryDemo" : @NO, |
| @"presentable" : @YES, |
| }; |
| } |
| |
| @end |