设置组件为圆角的方法

来源:互联网 发布:ios7cydia网络错误 编辑:程序博客网 时间:2024/04/28 14:41

使用相关的知识点是CALayer, 对这些内容一知半解的。

开发中用到了,搜索了很多网页,也算是做个小总结。

一直接设置View的四个角为圆角。

#import <QuartzCore/QuartzCore.h>view.layer.cornerRadius = cornerRadiusInPixels;view.layer.masksToBounds = YES;

直接在使用的组建View上设置。

二 根据需要设置View的角,比如左上,左下,右上,右下

往上搜索的相关方法是,制作一个相关的图片,然后覆盖上。

此方法来自:http://stackoverflow.com/questions/4847163/round-two-corners-in-uiview

static inline UIImage* MTDContextCreateRoundedMask( CGRect rect, CGFloat radius_tl, CGFloat radius_tr, CGFloat radius_bl, CGFloat radius_br ) {      CGContextRef context;    CGColorSpaceRef colorSpace;    colorSpace = CGColorSpaceCreateDeviceRGB();    // create a bitmap graphics context the size of the image    context = CGBitmapContextCreate( NULL, rect.size.width, rect.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast );    // free the rgb colorspace    CGColorSpaceRelease(colorSpace);        if ( context == NULL ) {        return NULL;    }    // cerate mask    CGFloat minx = CGRectGetMinX( rect ), midx = CGRectGetMidX( rect ), maxx = CGRectGetMaxX( rect );    CGFloat miny = CGRectGetMinY( rect ), midy = CGRectGetMidY( rect ), maxy = CGRectGetMaxY( rect );    CGContextBeginPath( context );    CGContextSetGrayFillColor( context, 1.0, 0.0 );    CGContextAddRect( context, rect );    CGContextClosePath( context );    CGContextDrawPath( context, kCGPathFill );    CGContextSetGrayFillColor( context, 1.0, 1.0 );    CGContextBeginPath( context );    CGContextMoveToPoint( context, minx, midy );    CGContextAddArcToPoint( context, minx, miny, midx, miny, radius_bl );    CGContextAddArcToPoint( context, maxx, miny, maxx, midy, radius_br );    CGContextAddArcToPoint( context, maxx, maxy, midx, maxy, radius_tr );    CGContextAddArcToPoint( context, minx, maxy, minx, midy, radius_tl );    CGContextClosePath( context );    CGContextDrawPath( context, kCGPathFill );    // Create CGImageRef of the main view bitmap content, and then    // release that bitmap context    CGImageRef bitmapContext = CGBitmapContextCreateImage( context );    CGContextRelease( context );    // convert the finished resized image to a UIImage     UIImage *theImage = [UIImage imageWithCGImage:bitmapContext];    // image is retained by the property setting above, so we can     // release the original    CGImageRelease(bitmapContext);    // return the image    return theImage;}  

然后使用上面的函数,在需要的View上进行设置

    UIImage *mask = MTDContextCreateRoundedMask( self.view.bounds, 50.0, 50.0, 0.0, 0.0 );    // Create a new layer that will work as a mask    CALayer *layerMask = [CALayer layer];    layerMask.frame = self.view.bounds;           // Put the mask image as content of the layer    layerMask.contents = (id)mask.CGImage;           // set the mask layer as mask of the view layer    self.view.layer.mask = layerMask;                  // Add a backaground color just to check if it works    self.view.backgroundColor = [UIColor redColor];    // Add a test view to verify the correct mask clipping    UIView *testView = [[UIView alloc] initWithFrame:CGRectMake( 0.0, 0.0, 50.0, 50.0 )];    testView.backgroundColor = [UIColor blueColor];    [self.view addSubview:testView];
UITableView设置为圆角的时候,用1的方法可以。

但是如果UITableView设置两个角为圆角,两个角为方角的时候,2的方法就有错误出现。

现在只能是给UITableView在加一个背景View,使用2进行设置,然后组合显示。


其他参考

实现圆角的三种方法http://www.xiaweipin.com/archives/98
例子 https://github.com/weipin/RoundedCorner

原创粉丝点击