module Lhj class Command class View < Command self.summary = '生成iOS组件源码' self.description = '使用`lhj view --type=UILabel --name=titleLabel`' def initialize(argv) @name = argv.option('name', 'titleLabel') @type = argv.option('type', 'UILabel') super end def names @name.split(',').map(&:strip) end def type @ele_type ||= begin case @type when /image/i 'UIImageView' when /stack/i 'UIStackView' when /label/i 'UILabel' when /table/i 'UITableView' when /text/i 'UITextField' when /button/i 'UIButton' when /view/i 'UIView' else @type end end end def run print_declare puts "\n\n" print_instance puts "\n\n" print_layout puts "\n\n" print_value end def puts_d(str) puts str.blue end def puts_i(str) puts str.blue end def puts_l(str) puts str.blue end def puts_v(str) puts str.blue end def print_declare names.each do |name| puts_d '///' puts_d "@property (nonatomic, strong) #{type} *#{name};" end end def print_instance names.each do |name| puts_i "-(#{type} *)#{name}" puts_i '{' puts_i " if(!_#{name}){" print_alloc(name) puts_i " _#{name}.translatesAutoresizingMaskIntoConstraints = NO;" print_property(name) puts_i ' }' puts_i " return _#{name};" puts_i '}' puts_i "\n" end end def print_alloc(name) case type when 'UIImageView' puts_i " _#{name} = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@\"xxxx\"]];" when 'UIButton' puts_i " _#{name} = [UIButton buttonWithType:UIButtonTypeCustom];" when 'UITableView' puts_i " _#{name} = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];" else puts_i " _#{name} = [[#{type} alloc] init];" end end def print_property(name) case type when 'UILabel' puts_i " _#{name}.textColor = kSetCOLOR(0x333333);" puts_i " _#{name}.text = @\"xxxxxxxx\";" puts_i " _#{name}.font = [UIFont systemFontOfSize:12.0 weight:UIFontWeightRegular];" puts_i " _#{name}.textAlignment = NSTextAlignmentCenter;" when 'UIImageView' puts_i " _#{name}.backgroundColor = kBackgroundColor;" puts_i " _#{name}.contentMode = UIViewContentModeScaleAspectFit;" puts_i " _#{name}.clipsToBounds = YES;" puts_i " _#{name}.layer.cornerRadius = 6.0f;" puts_i " _#{name}.layer.borderColor = kLineColor.CGColor;" puts_i " _#{name}.layer.borderWidth = 0.5;" when 'UITextField' puts_i " _#{name}.textColor = kSetCOLOR(0x333333);" puts_i " _#{name}.font = [UIFont systemFontOfSize:12.0 weight:UIFontWeightRegular];" when 'UIView' puts_i " _#{name}.backgroundColor = kBackgroundColor;" when 'UIStackView' puts_i " _#{name}.axis = UILayoutConstraintAxisHorizontal;" puts_i " _#{name}.distribution = UIStackViewDistributionFillEqually;" when 'UITableView' puts_i " _#{name}.backgroundColor = kBackgroundColor;" puts_i " _#{name}.delegate = self;" puts_i " _#{name}.delegate = self;" puts_i " _#{name}.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];" puts_i " _#{name}.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];" puts_i " _#{name}.separatorStyle = UITableViewCellSeparatorStyleNone;" when 'UIButton' puts_i " _#{name}.backgroundColor = kBackgroundColor;" puts_i " [_#{name} setTitle:@\"xxx\" forState:UIControlStateNormal];" puts_i " [_#{name} setTitleColor:kSetCOLOR(0x999999) forState:UIControlStateNormal];" puts_i " _#{name}.titleLabel.font = [UIFont systemFontOfSize:14.0 weight:UIFontWeightRegular];" puts_i " [_#{name} setImage:[UIImage imageNamed:@\"xx\"] forState:UIControlStateNormal];" puts_i " [_#{name} setImage:[UIImage imageNamed:@\"xx\"] forState:UIControlStateSelected];" puts_i " [_#{name} addTarget:self action:@selector(actionHandler:) forControlEvents:UIControlEventTouchUpInside];" end end def print_layout names.each do |name| puts_l "[contentView addSubview:self.#{name}];" puts_l "[self.#{name}.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor constant:0].active = YES;" puts_l "[self.#{name}.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor constant:0].active = YES;" puts_l "[self.#{name}.topAnchor constraintEqualToAnchor:contentView.topAnchor].active = YES;" puts_l "[self.#{name}.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor].active = YES;" puts_l "[self.#{name}.widthAnchor constraintEqualToConstant:80].active = YES;" puts_l "[self.#{name}.heightAnchor constraintEqualToConstant:80].active = YES;" if type.eql?('UILabel') puts_l "[self.#{name} setContentHuggingPriority:300 forAxis:UILayoutConstraintAxisHorizontal];" puts_l "[self.#{name} setContentCompressionResistancePriority:300 forAxis:UILayoutConstraintAxisHorizontal];" end puts_l "\n\n" end end def print_value names.each do |name| if type.eql?('UILabel') puts_v "self.#{name}.text = @\"xxxxx\";" end end end end end end