zoukankan      html  css  js  c++  java
  • 自己定义UITextField

    目的是实现例如以下的效果:


    UITextField的leftView是自己定义的UIView,当中:

    1、包括一个居中显示的icon。而且上,左,下各有1px的间隙

    2、左上和左下是圆角,右边没有圆角

    居中展示icon

    关键是leftView不是UIImageView。而是把UIImageView设置为subview

    CGFloat height = frame.size.height;
            
    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 1, height - 1, height - 2)];
            
    UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:iconName]];
    icon.frame = CGRectMake(height / 4, height / 4, height / 2, height / 2);
    [leftView addSubview:icon];
    上面的代码,使icon在leftView居中显示

    制造1px间隙

    top和bottom的间隙非常easy做,仅仅要令leftView的height比UITextField的height少2。然后y设置为1

    左側的间隙比較麻烦,首先将width设置为比UITextField的width少1。可是直接设置x为1无效。须要override下面方法:

    -(CGRect) leftViewRectForBounds:(CGRect)bounds {
        CGRect iconRect = [super leftViewRectForBounds:bounds];
        iconRect.origin.x += 1;
        return iconRect;
    }

    制造部分圆角

    制造全部的圆角比較简单,仅仅须要:

    self.layer.cornerRadius = 5;

    可是要制造部分圆角,就比較麻烦:

    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:leftView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(5, 5)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = leftView.bounds;
    maskLayer.path = maskPath.CGPath;
    leftView.layer.mask = maskLayer;

    创建阴影

    self.layer.shadowColor = [UIColor colorWithRed:132/255.0f green:214/255.0f blue:219/255.0f alpha:1.0f].CGColor;
    self.layer.shadowOpacity = 0.5;
    self.layer.shadowOffset = CGSizeMake(3, 3);

    完整的代码

    @implementation LosTextField
    
    -(id)initWithFrame:(CGRect)frame Icon:(NSString*)iconName
    {
        self = [super initWithFrame:frame];
        if (self) {
            
            CGFloat height = frame.size.height;
            
            UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 1, height - 1, height - 2)];
            leftView.backgroundColor = [UIColor colorWithRed:132/255.0f green:214/255.0f blue:219/255.0f alpha:1.0f];
            
            UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:iconName]];
            icon.frame = CGRectMake(height / 4, height / 4, height / 2, height / 2);
            [leftView addSubview:icon];
            
            UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:leftView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(5, 5)];
            CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
            maskLayer.frame = leftView.bounds;
            maskLayer.path = maskPath.CGPath;
            leftView.layer.mask = maskLayer;
            
            self.leftView = leftView;
            self.leftViewMode = UITextFieldViewModeAlways;
        }
        return self;
    }
    
    -(CGRect) leftViewRectForBounds:(CGRect)bounds {
        CGRect iconRect = [super leftViewRectForBounds:bounds];
        iconRect.origin.x += 1;
        return iconRect;
    }
    
    @end

    self.username = [[LosTextField alloc] initWithFrame:CGRectMake(20, 150, 280, 40) Icon:@"login_username"];



  • 相关阅读:
    python 类
    hdu 5761 Rowe Bo 微分方程
    calendar 示例
    hdu 5753 Permutation Bo
    hdu 5752 Sqrt Bo
    finally 语句
    throws 和 throw
    python打开.pkl的文件并显示里面的内容
    Python 类变量,成员变量,静态变量,局部变量
    python 实例方法,类方法,静态方法,普通函数
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6840599.html
Copyright © 2011-2022 走看看