123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- //
- // SBCustomStyleViewController.m
- // JDStatusBarNotificationExample
- //
- // Created by Markus on 08.11.13.
- // Copyright (c) 2013 Markus. All rights reserved.
- //
- #import <QuartzCore/QuartzCore.h>
- #import "JDStatusBarLayoutMarginHelper.h"
- #import "JDStatusBarNotification.h"
- #import "FTFontSelectorController.h"
- #import "SBSelectPropertyViewController.h"
- #import "InfColorPicker.h"
- #import "SBCustomStyleViewController.h"
- @interface SBCustomStyleViewController () <UITextFieldDelegate, FTFontSelectorControllerDelegate, InfColorPickerControllerDelegate>
- @property (nonatomic, assign) NSInteger colorMode;
- @property (nonatomic, assign) CGFloat progress;
- @property (nonatomic, weak) NSTimer *timer;
- @property (nonatomic, assign) JDStatusBarHeightForIPhoneX heightForIPhoneX;
- @property (nonatomic, assign) JDStatusBarAnimationType animationType;
- @property (nonatomic, assign) JDStatusBarProgressBarPosition progressBarPosition;
- @end
- @implementation SBCustomStyleViewController
- - (void)viewDidLoad;
- {
- [super viewDidLoad];
-
- self.animationType = JDStatusBarAnimationTypeMove;
- self.heightForIPhoneX = JDStatusBarHeightForIPhoneXFullNavBar;
- self.progressBarPosition = JDStatusBarProgressBarPositionBottom;
-
- self.textColorPreview.backgroundColor = self.fontButton.titleLabel.textColor;
- self.barColorPreview.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.000];
- self.progressBarColorPreview.backgroundColor = [UIColor redColor];
-
- self.textColorPreview.layer.cornerRadius = round(CGRectGetHeight(self.textColorPreview.frame)/3.0);
- self.barColorPreview.layer.cornerRadius = self.textColorPreview.layer.cornerRadius;
- self.progressBarColorPreview.layer.cornerRadius = self.textColorPreview.layer.cornerRadius;
-
- [self updateFontText];
- [self updateStyle];
- [self adjustForLayoutMargin];
- }
- - (void)adjustForLayoutMargin
- {
- // adjust bottom bar to respect layout margins
- CGFloat bottomLayoutMargin = JDStatusBarRootVCLayoutMargin().bottom;
- CGRect frame = self.bottomBarView.frame;
- frame.origin.y -= bottomLayoutMargin;
- frame.size.height += bottomLayoutMargin;
- self.bottomBarView.frame = frame;
- CGRect scrollViewFrame = self.scrollView.frame;
- scrollViewFrame.size.height -= bottomLayoutMargin;
- self.scrollView.frame = scrollViewFrame;
- }
- - (void)viewDidLayoutSubviews;
- {
- [super viewDidLayoutSubviews];
-
- self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width,
- self.lastRow.frame.origin.y + self.lastRow.frame.size.height + 10.0);
- }
- #pragma mark UI Updates
- - (void)updateFontText;
- {
- NSString *title = [NSString stringWithFormat: @"Change font (%.1f pt)",
- self.fontButton.titleLabel.font.pointSize];
- [self.fontButton setTitle:title forState:UIControlStateNormal];
- self.textColorPreview.backgroundColor = self.fontButton.titleLabel.textColor;
- }
- - (void)updateStyle;
- {
- [JDStatusBarNotification addStyleNamed:@"style" prepare:^JDStatusBarStyle *(JDStatusBarStyle *style) {
- style.font = self.fontButton.titleLabel.font;
- style.textColor = self.textColorPreview.backgroundColor;
- style.barColor = self.barColorPreview.backgroundColor;
- style.animationType = self.animationType;
- style.heightForIPhoneX = self.heightForIPhoneX;
- style.progressBarColor = self.progressBarColorPreview.backgroundColor;
- style.progressBarPosition = self.progressBarPosition;
- NSString *height = [self.barHeightLabel.text stringByReplacingOccurrencesOfString:@"ProgressBarHeight (" withString:@""];
- height = [height stringByReplacingOccurrencesOfString:@" pt)" withString:@""];
- style.progressBarHeight = [height doubleValue];
- return style;
- }];
- }
- #pragma mark UITextFieldDelegate
- - (BOOL)textFieldShouldReturn:(UITextField *)textField
- {
- [textField resignFirstResponder];
-
- if (textField.text.length == 0) {
- textField.text = @"Notification Text";
- }
-
- [self show:nil];
-
- return YES;
- }
- #pragma mark FTFontSelectorControllerDelegate
- - (void)fontSelectorControllerShouldBeDismissed:(FTFontSelectorController *)controller;
- {
- [self dismissViewControllerAnimated:YES completion:nil];
- }
- - (void)fontSelectorController:(FTFontSelectorController *)controller didChangeSelectedFontName:(NSString *)fontName;
- {
- self.fontButton.titleLabel.font = [UIFont fontWithName:fontName size:self.fontButton.titleLabel.font.pointSize];
- [self updateFontText];
- [self updateStyle];
- }
- #pragma mark InfColorPicker
- - (void)showColorPickerWithColor:(UIColor*)color;
- {
- InfColorPickerController *colorController = [InfColorPickerController colorPickerViewController];
- colorController.delegate = self;
- colorController.sourceColor = color;
- colorController.resultColor = color;
- [colorController presentModallyOverViewController:self];
-
- if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
- UIView *view = colorController.view;
- colorController.view = [[UIView alloc] initWithFrame:view.frame];
- colorController.view.backgroundColor = [UIColor blackColor];
- view.frame = CGRectMake(0, 64, view.bounds.size.width, view.bounds.size.height-64);
- [colorController.view addSubview:view];
- }
- }
- #pragma mark InfColorPickerControllerDelegate
- - (void)colorPickerControllerDidChangeColor:(InfColorPickerController *)controller;
- {
- switch (self.colorMode) {
- case 0: {
- [self.fontButton setTitleColor:controller.resultColor forState:UIControlStateNormal];
- self.textColorPreview.backgroundColor = controller.resultColor;
- [self updateFontText];
- break;
- }
- case 1: {
- self.barColorPreview.backgroundColor = controller.resultColor;
- break;
- }
- case 2: {
- self.progressBarColorPreview.backgroundColor = controller.resultColor;
- break;
- }
- }
-
- [self updateStyle];
- }
- - (void)colorPickerControllerDidFinish:(InfColorPickerController *)controller;
- {
- [self dismissViewControllerAnimated:YES completion:nil];
- }
- #pragma mark Actions
- - (IBAction)selectFont:(id)sender;
- {
- FTFontSelectorController *fontController = [[FTFontSelectorController alloc] initWithSelectedFontName:self.fontButton.titleLabel.font.fontName];
- [fontController setFontDelegate:self];
- [self presentViewController:fontController
- animated:YES completion:nil];
- }
- - (IBAction)selectFontSize:(UIStepper*)sender;
- {
- self.fontButton.titleLabel.font = [UIFont fontWithName:self.fontButton.titleLabel.font.fontName size:sender.value];
- [self updateFontText];
- [self updateStyle];
- }
- - (IBAction)selectTextColor:(id)sender;
- {
- self.colorMode = 0;
- [self showColorPickerWithColor:self.textColorPreview.backgroundColor];
- }
- - (IBAction)selectBarColor:(id)sender;
- {
- self.colorMode = 1;
- [self showColorPickerWithColor:self.barColorPreview.backgroundColor];
- }
- - (IBAction)selectAnimationStyle:(id)sender;
- {
- NSArray *data = @[@"JDStatusBarAnimationTypeNone",
- @"JDStatusBarAnimationTypeMove",
- @"JDStatusBarAnimationTypeBounce",
- @"JDStatusBarAnimationTypeFade"];
- SBSelectPropertyViewController *controller = [[SBSelectPropertyViewController alloc] initWithData:data resultBlock:^(NSInteger selectedRow) {
- self.animationType = selectedRow;
- [self.animationStyleButton setTitle:data[selectedRow] forState:UIControlStateNormal];
- [self.navigationController popViewControllerAnimated:YES];
- [self updateStyle];
- }];
- controller.title = @"Animation Type";
- controller.activeRow = self.animationType;
- [self.navigationController pushViewController:controller animated:YES];
- }
- - (IBAction)selectIPhoneXHeight:(id)sender;
- {
- NSArray *data = @[@"JDStatusBarHeightForIPhoneXHalf",
- @"JDStatusBarHeightForIPhoneXFullNavBar"];
- SBSelectPropertyViewController *controller = [[SBSelectPropertyViewController alloc] initWithData:data resultBlock:^(NSInteger selectedRow) {
- self.heightForIPhoneX = selectedRow;
- [self.heightForIPhoneXButton setTitle:data[selectedRow] forState:UIControlStateNormal];
- [self.navigationController popViewControllerAnimated:YES];
- [self updateStyle];
- }];
- controller.title = @"Height for iPhoneX";
- controller.activeRow = self.heightForIPhoneX;
- [self.navigationController pushViewController:controller animated:YES];
- }
- - (IBAction)selectProgressBarColor:(id)sender;
- {
- self.colorMode = 2;
- [self showColorPickerWithColor:self.progressBarColorPreview.backgroundColor];
- }
- - (IBAction)selectProgressBarPosition:(id)sender;
- {
- NSArray *data = @[@"JDStatusBarProgressBarPositionBottom",
- @"JDStatusBarProgressBarPositionCenter",
- @"JDStatusBarProgressBarPositionTop",
- @"JDStatusBarProgressBarPositionBelow",
- @"JDStatusBarProgressBarPositionNavBar"];
- SBSelectPropertyViewController *controller = [[SBSelectPropertyViewController alloc] initWithData:data resultBlock:^(NSInteger selectedRow) {
- self.progressBarPosition = selectedRow;
- [self.barPositionButton setTitle:data[selectedRow] forState:UIControlStateNormal];
- [self.navigationController popViewControllerAnimated:YES];
- [self updateStyle];
- }];
- controller.title = @"Progress Bar Position";
- controller.activeRow = self.progressBarPosition;
- [self.navigationController pushViewController:controller animated:YES];
- }
- - (IBAction)setProgressBarHeight:(UIStepper*)sender;
- {
- if (sender.value < 1) sender.value = 0.5;
- if (sender.value >= 1) sender.value = round(sender.value);
-
- self.barHeightLabel.text = [NSString stringWithFormat: @"ProgressBarHeight (%.1f pt)", sender.value];
- [self updateStyle];
- }
- #pragma mark Presentation
- - (IBAction)show:(id)sender;
- {
- [JDStatusBarNotification showWithStatus:self.textField.text dismissAfter:2.0 styleName:@"style"];
- }
- - (IBAction)showWithProgress:(id)sender;
- {
- double delayInSeconds = [JDStatusBarNotification isVisible] ? 0.0 : 0.25;
- dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
- dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
- self.progress = 0.0;
- [self startTimer];
- });
-
- [JDStatusBarNotification showWithStatus:self.textField.text dismissAfter:1.3 styleName:@"style"];
- }
- #pragma mark Progress Timer
- - (void)startTimer;
- {
- [JDStatusBarNotification showProgress:self.progress];
-
- [self.timer invalidate];
- self.timer = nil;
-
- if (self.progress < 1.0) {
- CGFloat step = 0.02;
- self.timer = [NSTimer scheduledTimerWithTimeInterval:step target:self
- selector:@selector(startTimer)
- userInfo:nil repeats:NO];
- self.progress += step;
- } else {
- [self performSelector:@selector(hideProgress)
- withObject:nil afterDelay:0.5];
- }
- }
- - (void)hideProgress;
- {
- [JDStatusBarNotification showProgress:0.0];
- }
- @end
|