因為項目需要,就去查找畫圓角的資料了,剛開始找到的比較麻煩,是要利用上下文的,后面找到了利用CAShapeLayer來做,比較簡便。我也是直接從網絡上扒下來的。但是后來想想,如果是圓角應該怎么做呢,有去查資料了,剛巧在簡書上看見有人放了矩形虛線的代碼,下面有人問圓角怎么弄,我竟然自己突然想到了:“改變貝塞爾曲線”。當時真的自己都震驚了=。=,本來想去查資料復制粘貼的,沒想到靈機一動,自己找到了辦法,有點興奮。好,廢話不多說,開始正題。
下面代碼是對UIImageView做處理的,不過對于UIView應該都是一樣的。
定義變量:
@property(nonatomic,strong) CAShapeLayer *shapeLayer;
@property(nonatomic,strong) UIImageView *imageV_IDCard;
寫好懶加載:
-(UIImageView *)imageV_IDCard{
if (!_imageV_IDCard) {
_imageV_IDCard = [[UIImageView alloc] initWithFrame:CGRectMake(22, 66, SCREEN_WIDTH / 2.0 , SCREEN_WIDTH / 2.0)];
_imageV_IDCard.layer.cornerRadius = 25;
_imageV_IDCard.backgroundColor = [UIColor lightGrayColor];
}
return _imageV_IDCard;
}
-(CAShapeLayer *)shapeLayer{
if (!_shapeLayer) {
_shapeLayer = [CAShapeLayer layer];
_shapeLayer.strokeColor = [UIColor redColor].CGColor;
_shapeLayer.fillColor = [UIColor greenColor].CGColor;
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageV_IDCard.bounds cornerRadius:25];
_shapeLayer.path = path.CGPath;
_shapeLayer.frame = self.imageV_IDCard.bounds;
_shapeLayer.lineWidth = 2;
_shapeLayer.lineCap = @"square";
_shapeLayer.lineDashPattern = @[@5, @5];
}
return _shapeLayer;
}
注意的就是imageview和shapelayer要設置一樣他圓角。
然后一添加,就成功了:
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageV_IDCard];
[self.imageV_IDCard.layer addSublayer:self.shapeLayer];
}
不過,我對于_shapeLayer.lineDashPattern這個屬性還是很有疑惑,我查到的資料是說,前一個值是實線長度,后一個值是空白長度,但是我運行出來的畫面,和設置的長度不一樣。有懂的朋友,在下面留言哦~,謝謝~
除非注明,文章均為seanward原創,轉載請注明本文地址:http://www.lxweimin.com/p/852581a165dd