212 lines
5.6 KiB
Objective-C
212 lines
5.6 KiB
Objective-C
//
|
|
// CLFontPickerView.m
|
|
//
|
|
// Created by sho yakushiji on 2013/12/14.
|
|
// Copyright (c) 2013年 CALACULU. All rights reserved.
|
|
//
|
|
|
|
#import "CLFontPickerView.h"
|
|
|
|
#import "UIView+Frame.h"
|
|
#import "CLPickerView.h"
|
|
|
|
const CGFloat kCLFontPickerViewConstantFontSize = 14;
|
|
|
|
@interface CLFontPickerView()
|
|
<CLPickerViewDelegate, CLPickerViewDataSource>
|
|
@end
|
|
|
|
@implementation CLFontPickerView
|
|
{
|
|
CLPickerView *_pickerView;
|
|
}
|
|
|
|
+ (NSArray*)allFontList
|
|
{
|
|
NSMutableArray *list = [NSMutableArray array];
|
|
|
|
for(NSString *familyName in [UIFont familyNames]){
|
|
for(NSString *fontName in [UIFont fontNamesForFamilyName:familyName]){
|
|
[list addObject:[UIFont fontWithName:fontName size:kCLFontPickerViewConstantFontSize]];
|
|
}
|
|
}
|
|
|
|
return [list sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"fontName" ascending:YES]]];
|
|
}
|
|
|
|
+ (NSArray*)defaultSizes
|
|
{
|
|
return @[@8, @10, @12, @14, @16, @18, @20, @24, @28, @32, @38, @44, @50];
|
|
}
|
|
|
|
+ (UIFont*)defaultFont
|
|
{
|
|
return [UIFont fontWithName:@"HiraKakuProN-W3"size:kCLFontPickerViewConstantFontSize];
|
|
}
|
|
|
|
- (id)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self) {
|
|
self.clipsToBounds = YES;
|
|
|
|
_pickerView = [[CLPickerView alloc] initWithFrame:self.bounds];
|
|
_pickerView.center = CGPointMake(self.width/2, self.height/2);
|
|
_pickerView.backgroundColor = [UIColor clearColor];
|
|
_pickerView.dataSource = self;
|
|
_pickerView.delegate = self;
|
|
[self addSubview:_pickerView];
|
|
|
|
self.fontList = [self.class allFontList];
|
|
self.fontSizes = [self.class defaultSizes];
|
|
self.font = [self.class defaultFont];
|
|
self.foregroundColor = [UIColor colorWithWhite:1 alpha:0.8];
|
|
self.textColor = [UIColor blackColor];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setForegroundColor:(UIColor *)foregroundColor
|
|
{
|
|
_pickerView.foregroundColor = foregroundColor;
|
|
}
|
|
|
|
- (UIColor*)foregroundColor
|
|
{
|
|
return _pickerView.foregroundColor;
|
|
}
|
|
|
|
- (void)setFontList:(NSArray *)fontList
|
|
{
|
|
if(fontList != _fontList){
|
|
_fontList = fontList;
|
|
[_pickerView reloadComponent:0];
|
|
}
|
|
}
|
|
|
|
- (void)setFontSizes:(NSArray *)fontSizes
|
|
{
|
|
if(fontSizes != _fontSizes){
|
|
_fontSizes = fontSizes;
|
|
[_pickerView reloadComponent:1];
|
|
}
|
|
}
|
|
|
|
- (void)setFont:(UIFont *)font
|
|
{
|
|
UIFont *tmp = [font fontWithSize:kCLFontPickerViewConstantFontSize];
|
|
|
|
NSInteger fontIndex = [self.fontList indexOfObject:tmp];
|
|
if(fontIndex==NSNotFound){ fontIndex = 0; }
|
|
|
|
NSInteger sizeIndex = 0;
|
|
for(sizeIndex=0; sizeIndex<self.fontSizes.count; sizeIndex++){
|
|
if(font.pointSize<=[self.fontSizes[sizeIndex] floatValue]){
|
|
break;
|
|
}
|
|
}
|
|
|
|
[_pickerView selectRow:fontIndex inComponent:0 animated:NO];
|
|
[_pickerView selectRow:sizeIndex inComponent:1 animated:NO];
|
|
}
|
|
|
|
- (UIFont*)font
|
|
{
|
|
UIFont *font = self.fontList[[_pickerView selectedRowInComponent:0]];
|
|
CGFloat size = [self.fontSizes[[_pickerView selectedRowInComponent:1]] floatValue];
|
|
return [font fontWithSize:size];
|
|
}
|
|
|
|
- (void)setSizeComponentHidden:(BOOL)sizeComponentHidden
|
|
{
|
|
_sizeComponentHidden = sizeComponentHidden;
|
|
|
|
[_pickerView setNeedsLayout];
|
|
}
|
|
|
|
#pragma mark- UIPickerViewDataSource
|
|
|
|
- (NSInteger)numberOfComponentsInPickerView:(CLPickerView *)pickerView
|
|
{
|
|
return 2;
|
|
}
|
|
|
|
- (NSInteger)pickerView:(CLPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
|
|
{
|
|
switch (component) {
|
|
case 0:
|
|
return self.fontList.count;
|
|
case 1:
|
|
return self.fontSizes.count;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#pragma mark- UIPickerViewDelegate
|
|
|
|
- (CGFloat)pickerView:(CLPickerView *)pickerView rowHeightForComponent:(NSInteger)component
|
|
{
|
|
return self.height/4;
|
|
}
|
|
|
|
- (CGFloat)pickerView:(CLPickerView *)pickerView widthForComponent:(NSInteger)component
|
|
{
|
|
CGFloat ratio = self.sizeComponentHidden ? 1 : 0.8;
|
|
switch (component) {
|
|
case 0:
|
|
return self.width*ratio;
|
|
case 1:
|
|
return self.width*(1-ratio);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
- (UIView*)pickerView:(CLPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
|
|
{
|
|
UILabel *lbl = nil;
|
|
|
|
if([view isKindOfClass:[UILabel class]]){
|
|
lbl = (UILabel*)view;
|
|
}
|
|
else{
|
|
CGFloat W = [self pickerView:pickerView widthForComponent:component];
|
|
CGFloat H = [self pickerView:pickerView rowHeightForComponent:component];
|
|
CGFloat dx = 10;
|
|
lbl = [[UILabel alloc] initWithFrame:CGRectMake(dx, 0, W-2*dx, H)];
|
|
lbl.backgroundColor = [UIColor clearColor];
|
|
lbl.adjustsFontSizeToFitWidth = YES;
|
|
lbl.minimumScaleFactor = 0.5;
|
|
lbl.textAlignment = NSTextAlignmentCenter;
|
|
lbl.textColor = self.textColor;
|
|
}
|
|
|
|
switch (component) {
|
|
case 0:
|
|
lbl.font = self.fontList[row];
|
|
if(self.text.length>0){
|
|
lbl.text = self.text;
|
|
}
|
|
else{
|
|
lbl.text = [NSString stringWithFormat:@"%@", lbl.font.fontName];
|
|
}
|
|
break;
|
|
case 1:
|
|
lbl.font = [UIFont systemFontOfSize:kCLFontPickerViewConstantFontSize];
|
|
lbl.text = [NSString stringWithFormat:@"%@", self.fontSizes[row]];
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return lbl;
|
|
}
|
|
|
|
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
|
|
{
|
|
if([self.delegate respondsToSelector:@selector(fontPickerView:didSelectFont:)]){
|
|
[self.delegate fontPickerView:self didSelectFont:self.font];
|
|
}
|
|
}
|
|
|
|
@end
|