UIView(含所有子视图)分类方法 --- 为了方便设置控件的frame

部分代码如下:

//设置控件frame时,先设置尺寸width,height,再设置中心,centerX,centerY
- (CGFloat)sth_right{ return self.sth_x+ self.sth_width; } - (void)setSth_right:(CGFloat)sth_right{ self.sth_x = sth_right - self.sth_width; } - (CGFloat)sth_bottom{ return self.sth_y+ self.sth_height; } - (void)setSth_bottom:(CGFloat)sth_bottom{ self.sth_y = sth_bottom - self.sth_height; }

 实例分析:

 1.注意一般设置子view位置时,一般使用width或height,及x,y,最好不要使用centerX或Y一般说来不太准确。

 2.分类设置子view位置时一定要重写layoutSubViews方法,并先调用父类方法

//view分类
#import <UIKit/UIKit.h>
@interface UIView (STHViewFrame)
@property (nonatomic, assign) CGFloat sth_x;
@property (nonatomic, assign) CGFloat sth_y;
@property (nonatomic, assign) CGFloat sth_w;
@property (nonatomic, assign) CGFloat sth_h;
@property (nonatomic, assign) CGFloat sth_centerX;
@property (nonatomic, assign) CGFloat sth_centerY;
@property (nonatomic, assign) CGFloat sth_right;
@property (nonatomic, assign) CGFloat sth_bottom;
@end

#import "UIView+STHViewFrame.h"

@implementation UIView (STHViewFrame)

- (CGFloat)sth_x{
    return self.center.x;
}
- (void)setSth_x:(CGFloat)sth_x{
    
    CGRect frame  = self.frame;
    frame.origin.x = sth_x;
    self.frame = frame;
}
- (CGFloat)sth_y{
    return self.center.y;
}
- (void)setSth_y:(CGFloat)sth_y{
    CGRect frame = self.frame;
    frame.origin.y = sth_y;
    self.frame = frame;
}
- (CGFloat)sth_w{
    return self.frame.size.width;
}
- (void)setSth_w:(CGFloat)sth_w{
    CGRect frame = self.frame;
    frame.size.width = sth_w;
    self.frame = frame;
}
- (CGFloat)sth_h{
    return self.frame.size.height;
}
- (void)setSth_h:(CGFloat)sth_h{
    CGRect frame = self.frame;
    frame.size.height = sth_h;
    self.frame = frame;
}
- (CGFloat)sth_centerX{
    return self.center.x;
}
- (void)setSth_centerX:(CGFloat)sth_centerX{
    
    CGPoint center = self.center;
    center.x = sth_centerX;
    self.center = center;
}
- (CGFloat)sth_centerY{
    return self.center.y;
}
- (void)setSth_centerY:(CGFloat)sth_centerY{
    
    CGPoint center = self.center;
    center.y = sth_centerY;
    self.center = center;
}
- (CGFloat)sth_right{
    
    return self.sth_x + self.sth_w;
}
- (void)setSth_right:(CGFloat)sth_right{
    self.sth_x = sth_right - self.sth_w;
}
- (CGFloat)sth_bottom{
    
    return self.sth_y + self.sth_h;
}
- (void)setSth_bottom:(CGFloat)sth_bottom{
    self.sth_y = sth_bottom - self.sth_h;
}
@end

//自定义按钮及布局
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
@interface customButton : UIButton
@end

#import "ViewController.h"
#import "UIView+STHViewFrame.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSArray *images = @[@"mine_icon_nearby",@"mine_icon_random",@"mine-icon-activity"];
    NSArray *titles = @[@"位置",@"我的",@"他的"];
    
    for (NSInteger i = 0; i < images.count; i++) {
        
        customButton *button = [[customButton alloc] initWithFrame:CGRectMake(20+i*110, 200, 100, 100)];
        [button setImage:[UIImage imageNamed:images[i]] forState:UIControlStateNormal];
        [button setTitle:titles[i] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
        [button setBackgroundColor:[UIColor yellowColor]];
        [button.titleLabel setTextAlignment:NSTextAlignmentCenter];
        [self.view addSubview:button];
    }
}
@end
@implementation customButton

- (void)layoutSubviews{
    [super layoutSubviews];
    NSLog(@"%f%f--%f%f",self.sth_centerY,self.sth_centerX,self.sth_h,self.sth_w);
    self.imageView.sth_centerX = self.sth_w/2;
    self.imageView.sth_y = self.sth_h/2 - 5 - self.imageView.image.size.height/2;
    self.imageView.sth_w = self.imageView.image.size.width;
    self.imageView.sth_h = self.imageView.image.size.height;
    self.titleLabel.sth_y = CGRectGetMaxY(self.imageView.frame)+5;
    self.titleLabel.sth_x = 0;
    self.titleLabel.sth_h = 17;
    self.titleLabel.sth_w = self.sth_w;
}
@end

  效果图:

 

posted @ 2017-03-07 20:40  TheYouth  阅读(468)  评论(0编辑  收藏  举报