| /* |
| 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. |
| */ |
| |
| /* IMPORTANT: |
| This file contains supplemental code used to populate the examples with dummy data and/or |
| instructions. It is not necessary to import this file to use Material Components for iOS. |
| */ |
| |
| #import "ActivityIndicatorExampleSupplemental.h" |
| |
| #import "MaterialTypography.h" |
| |
| #define MDC_CATALOG_GREEN [UIColor colorWithRed:0 green:0xe6/255.0f blue:0x76/255.0f alpha:1] |
| |
| static NSString * const kCell = @"Cell"; |
| |
| |
| @implementation ActivityIndicatorExample (CatalogByConvention) |
| |
| + (NSArray *)catalogBreadcrumbs { |
| return @[ @"Activity Indicator", @"Activity Indicator" ]; |
| } |
| |
| + (NSString *)catalogDescription { |
| return @"Activity Indicator is a visual indication of an app loading content. It can display how " |
| @"long an operation will take or visualize an unspecified wait time."; |
| } |
| |
| + (BOOL)catalogIsPrimaryDemo { |
| return YES; |
| } |
| |
| + (BOOL)catalogIsPresentable { |
| return YES; |
| } |
| |
| @end |
| |
| @implementation ActivityIndicatorExample (Supplemental) |
| |
| - (void)setupExampleViews { |
| [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCell]; |
| |
| // Set up container view of three activity indicators. |
| UIView *indicators = |
| [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 160)]; |
| |
| [indicators addSubview:self.activityIndicator1]; |
| [indicators addSubview:self.activityIndicator2]; |
| [indicators addSubview:self.activityIndicator3]; |
| |
| self.activityIndicator1.center = |
| CGPointMake(indicators.bounds.size.width / 3, indicators.bounds.size.height / 2); |
| self.activityIndicator2.center = |
| CGPointMake(indicators.bounds.size.width / 2, indicators.bounds.size.height / 2); |
| self.activityIndicator3.center = |
| CGPointMake(2 * indicators.bounds.size.width / 3, indicators.bounds.size.height / 2); |
| |
| self.indicators = indicators; |
| |
| self.onSwitch = [[UISwitch alloc] init]; |
| [self.onSwitch setOn:YES]; |
| [self.onSwitch addTarget:self |
| action:@selector(didChangeOnSwitch:) |
| forControlEvents:UIControlEventValueChanged]; |
| |
| self.modeSwitch = [[UISwitch alloc] init]; |
| [self.modeSwitch addTarget:self |
| action:@selector(didChangeModeSwitch:) |
| forControlEvents:UIControlEventValueChanged]; |
| |
| CGRect sliderFrame = CGRectMake(0, 0, 160, 27); |
| self.slider = [[UISlider alloc] initWithFrame:sliderFrame]; |
| self.slider.value = kActivityInitialProgress; |
| [self.slider addTarget:self |
| action:@selector(didChangeSliderValue:) |
| forControlEvents:UIControlEventValueChanged]; |
| |
| self.activityIndicator2.progress = self.slider.value; |
| self.activityIndicator3.progress = self.slider.value; |
| |
| self.tableView.layoutMargins = UIEdgeInsetsZero; |
| self.tableView.separatorInset = UIEdgeInsetsZero; |
| } |
| |
| - (void)didChangeOnSwitch:(UISwitch *)onSwitch { |
| if (onSwitch.on) { |
| [self.activityIndicator1 startAnimating]; |
| [self.activityIndicator2 startAnimating]; |
| [self.activityIndicator3 startAnimating]; |
| } else { |
| [self.activityIndicator1 stopAnimating]; |
| [self.activityIndicator2 stopAnimating]; |
| [self.activityIndicator3 stopAnimating]; |
| } |
| } |
| |
| - (void)didChangeModeSwitch:(UISwitch *)switchControl { |
| if (switchControl.on) { |
| self.activityIndicator2.indicatorMode = MDCActivityIndicatorModeDeterminate; |
| self.activityIndicator3.indicatorMode = MDCActivityIndicatorModeDeterminate; |
| } else { |
| self.activityIndicator2.indicatorMode = MDCActivityIndicatorModeIndeterminate; |
| self.activityIndicator3.indicatorMode = MDCActivityIndicatorModeIndeterminate; |
| } |
| } |
| |
| - (void)didChangeSliderValue:(UISlider *)slider { |
| self.activityIndicator1.progress = slider.value; |
| self.activityIndicator2.progress = slider.value; |
| self.activityIndicator3.progress = slider.value; |
| UITableViewCell *cell = |
| [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]]; |
| cell.textLabel.text = [NSString stringWithFormat:@"%.00f%%", slider.value * 100]; |
| [cell setNeedsDisplay]; |
| } |
| |
| #pragma mark - |
| |
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
| return 4; |
| } |
| |
| - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { |
| if (indexPath.row == 0) return 160; |
| return 56; |
| } |
| |
| - (UITableViewCell *)tableView:(UITableView *)tableView |
| cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
| UITableViewCell *cell = |
| [tableView dequeueReusableCellWithIdentifier:kCell forIndexPath:indexPath]; |
| cell.textLabel.text = @""; |
| switch (indexPath.row) { |
| case 0: |
| cell.accessoryView = nil; |
| cell.textLabel.text = nil; |
| [cell addSubview:self.indicators]; |
| break; |
| case 1: |
| cell.accessoryView = self.slider; |
| cell.textLabel.text = @"Progress"; |
| break; |
| case 2: |
| cell.accessoryView = self.onSwitch; |
| cell.textLabel.text = @"Show Indicator"; |
| break; |
| case 3: |
| cell.accessoryView = self.modeSwitch; |
| cell.textLabel.text = @"Show Determinate"; |
| break; |
| default: |
| break; |
| } |
| return cell; |
| } |
| |
| @end |