You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // FLEXArgumentInputFontView.m // Flipboard // // Created by Ryan Olson on 6/28/14. // Copyright (c) 2014 Flipboard. All rights reserved. //
#import "FLEXArgumentInputFontView.h" #import "FLEXArgumentInputViewFactory.h" #import "FLEXRuntimeUtility.h" #import "FLEXArgumentInputFontsPickerView.h"
@interface FLEXArgumentInputFontView ()
@property (nonatomic) FLEXArgumentInputView *fontNameInput; @property (nonatomic) FLEXArgumentInputView *pointSizeInput;
@end
@implementation FLEXArgumentInputFontView
- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.fontNameInput = [[FLEXArgumentInputFontsPickerView alloc] initWithArgumentTypeEncoding:FLEXEncodeClass(NSString)]; self.fontNameInput.backgroundColor = self.backgroundColor; self.fontNameInput.targetSize = FLEXArgumentInputViewSizeSmall; self.fontNameInput.title = @"Font Name:"; [self addSubview:self.fontNameInput]; self.pointSizeInput = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:@encode(CGFloat)]; self.pointSizeInput.backgroundColor = self.backgroundColor; self.pointSizeInput.targetSize = FLEXArgumentInputViewSizeSmall; self.pointSizeInput.title = @"Point Size:"; [self addSubview:self.pointSizeInput]; } return self; }
- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.fontNameInput.backgroundColor = backgroundColor; self.pointSizeInput.backgroundColor = backgroundColor; }
- (void)setInputValue:(id)inputValue { if ([inputValue isKindOfClass:[UIFont class]]) { UIFont *font = (UIFont *)inputValue; self.fontNameInput.inputValue = font.fontName; self.pointSizeInput.inputValue = @(font.pointSize); } }
- (id)inputValue { CGFloat pointSize = 0; if ([self.pointSizeInput.inputValue isKindOfClass:[NSValue class]]) { NSValue *pointSizeValue = (NSValue *)self.pointSizeInput.inputValue; if (strcmp([pointSizeValue objCType], @encode(CGFloat)) == 0) { [pointSizeValue getValue:&pointSize]; } } return [UIFont fontWithName:self.fontNameInput.inputValue size:pointSize]; }
- (BOOL)inputViewIsFirstResponder { return [self.fontNameInput inputViewIsFirstResponder] || [self.pointSizeInput inputViewIsFirstResponder]; }
#pragma mark - Layout and Sizing
- (void)layoutSubviews { [super layoutSubviews]; CGFloat runningOriginY = self.topInputFieldVerticalLayoutGuide; CGSize fontNameFitSize = [self.fontNameInput sizeThatFits:self.bounds.size]; self.fontNameInput.frame = CGRectMake(0, runningOriginY, fontNameFitSize.width, fontNameFitSize.height); runningOriginY = CGRectGetMaxY(self.fontNameInput.frame) + [[self class] verticalPaddingBetweenFields]; CGSize pointSizeFitSize = [self.pointSizeInput sizeThatFits:self.bounds.size]; self.pointSizeInput.frame = CGRectMake(0, runningOriginY, pointSizeFitSize.width, pointSizeFitSize.height); }
+ (CGFloat)verticalPaddingBetweenFields { return 10.0; }
- (CGSize)sizeThatFits:(CGSize)size { CGSize fitSize = [super sizeThatFits:size]; CGSize constrainSize = CGSizeMake(size.width, CGFLOAT_MAX); CGFloat height = fitSize.height; height += [self.fontNameInput sizeThatFits:constrainSize].height; height += [[self class] verticalPaddingBetweenFields]; height += [self.pointSizeInput sizeThatFits:constrainSize].height; return CGSizeMake(fitSize.width, height); }
#pragma mark -
+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { BOOL supported = type && strcmp(type, FLEXEncodeClass(UIFont)) == 0; supported = supported || (value && [value isKindOfClass:[UIFont class]]); return supported; }
@end
|