iOS开发 | 关于圆角

2018-02-23  本文已影响0人  _冇毒

本文参考: http://www.baidu.com

一说到圆角, 我们最先想到的可能就是

[view.layer setCornerRadius:3];
[view.layer setMasksToBounds:YES];

但这种方法会造成离屏渲染,对性能影响较大, 设置的少了也能用. 但如果是在tableView上使用的话. 对性能的考验还是很大的. 不推荐使用

1. UITextField
textField.borderStyle = UITextBorderStyleRoundedRect;
2. UIView(不包括其子类)
UIView * view = [[UIView alloc] init];
view.backgroundColor = [UIColor redColor];
view.layer.cornerRadius = 3.0f;
// 以下两行,任写一行
view.layer.masksToBounds = NO;
view.clipToBounds = NO;
// 以下两行,千万不要加!
view.layer.masksToBounds = YES;
view.clipToBounds = YES;

*注:UIView 只要设置图层的 cornerRadius 属性即可,如果设置 layer.masksToBounds = YES,会造成不必要的离屏渲染。

3. UITextView
// 与 UIView 类似
UITextView *textView = [[UITextView alloc] init];
textView.layer.cornerRadius = cornerRadius;
4. UILabel
UILabel *label = [[UILabel alloc] init];
// 重点在此!!设置视图的图层背景色,千万不要直接设置 label.backgroundColor
label.layer.backgroundColor = [UIColor grayColor].CGColor;
label.layer.cornerRadius = cornerRadius;
5. UIButton
/**
*  背景图片绘制方法
*/
+ (UIImage *)pureColorImageWithSize:(CGSize)size color:(UIColor *)color cornRadius:(CGFloat)cornRadius 
{
  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, size.width, size.height)];
  view.backgroundColor = color;
  view.layer.cornerRadius = cornerRadius;
  // 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数是屏幕密度
  UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);
  [view.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return image;
}
6. UIImageView

imageView 可以通过图片上的圆角来实现或者使用贝塞尔曲线的方法来实现, 这种方法比较麻烦一点, 但是用的多了就好了

- (UIImageView *)roundedRectImageViewWithCornerRadius:(CGFloat)cornerRadius image:(UIImageView *)imageView 
{
    UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
    [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];
    [imageView drawRect:imageView.bounds];
    imageView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return imageView;
}

还有一种方法 cashapelayer和uibezierpath设置圆角, 也是我比较常用的一种

#import <AVFoundation/AVFoundation.h>

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
imageView.image = [UIImage imageNamed:@"icon"];
UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];
CAShapeLayer * layer = [[CAShapeLayer alloc] init];
layer.frame = imageView.bounds;
layer.path = path.CGPath;
imageView.layer.mask = layer;
[self.imageView addSubview:imageView];
上一篇下一篇

猜你喜欢

热点阅读