// 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