自定义view

2016-11-06  本文已影响15人  阿龍飛

XIB

1.继承UIView创建View类,命名ViewA
2.新建一个Xib,取名ViewA

设置Class 去掉状态栏,大小自由
#import <UIKit/UIKit.h>

@interface ViewA : UIView

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

- (void)configeWithImage:(UIImage *)image;

@end
#import "ViewA.h"

@implementation ViewA


- (void)awakeFromNib {
    [super awakeFromNib];
    _imageView.layer.masksToBounds = YES;
    _imageView.layer.cornerRadius = self.frame.size.width/2;
}

- (void)configeWithImage:(UIImage *)image {
    _imageView.image = image;
}

-(void)layoutSubviews {
    [super layoutSubviews];
    _imageView.layer.cornerRadius = self.frame.size.width/2;
}

@end

3.使用ViewA

    ViewA * viewA = [[[NSBundle mainBundle] loadNibNamed:@"ViewA" owner:nil options:nil] lastObject];
    viewA.frame = CGRectMake(0, 0, 100, 100);
    [viewA configeWithImage:[UIImage imageNamed:@"123"]];
    [self.view addSubview:viewA];

纯代码

#import <UIKit/UIKit.h>

@interface ViewB : UIView

@property (nonatomic , strong) UIImageView * imageView;

- (void)configeWithImage:(UIImage *)image;

@end
#import "ViewB.h"

@implementation ViewB

-(instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
        _imageView.contentMode = UIViewContentModeScaleAspectFill;
        _imageView.layer.masksToBounds = YES;
        _imageView.layer.cornerRadius = frame.size.width/2;
        [self addSubview:_imageView];
    }
    return self;
}

//如果需要对子视图重新布局,需要调用layoutSubViews方法:
-(void)layoutSubviews {
    [super layoutSubviews];
    _imageView.frame = self.frame;
    _imageView.layer.cornerRadius = self.frame.size.width/2;
}

- (void)configeWithImage:(UIImage *)image {
    _imageView.image = image;
}

@end

使用ViewB

    ViewB * viewB = [[ViewB alloc] initWithFrame:CGRectMake(0, 80, 150, 150)];
    [viewB configeWithImage:[UIImage imageNamed:@"123"]];
    [self.view addSubview:viewB];
上一篇下一篇

猜你喜欢

热点阅读