码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发黑魔法

时间:2016-05-29 19:49:18      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

---- 说在前面的话

    今天分享两个东西: 1.UITableView系统原生分割线,怎么设置顶格?

                             2.怎么给UIView设置两边是圆角,其它两边是直角的效果?

 

一.UITableVew自带的分割线,左边有10X的缩进,相信小伙伴们也试过setSeparatorInset这个方法,具体效果自己试吧,反正不管用.如果原型图上是顶格的分割线,怎么办?自定义cell里画一条线?当然可以!但是超麻烦,不是吗?

    今天给大家分享一个超简单的方法.遵守<UITableViewDelegate>,在-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath这个代理方法中做一些设置即可.代码如下:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

 OK 搞定!

 

二.上一张原型图,说明一下需求

 技术分享

 上边就是半边圆角,半边直角的效果.好了,废话不多说,思路如下: 给UIView添加个分类,设定一些枚举值(哪边要圆角),自定义CAShapeLayer,给UIView的layer添加即可,

  代码如下:

#import <UIKit/UIKit.h>

typedef enum {

    YYSideStyleLeft, // 左上左下圆角
    YYSideStyleTop,  // 左上右上圆角
    YYSideStyleBottom,// 左上右下圆角
    YYSideStyleRight // 右上右下圆角
    
} YYSideStyle;

@interface UIView (estension)

/** 设置某两边圆角效果 -- 需要制定bounds */
- (void)roundSide:(YYSideStyle)side;

@end

#import "UIView+estension.h"

@implementation UIView (estension)

- (void)roundSide:(YYSideStyle)side
{
    UIBezierPath *maskPath;
    
    if (side == YYSideStyleLeft)
        maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                         byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerBottomLeft)
                                               cornerRadii:CGSizeMake(5.f, 5.f)];
    else if (side == YYSideStyleRight)
        maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                         byRoundingCorners:(UIRectCornerTopRight|UIRectCornerBottomRight)
                                               cornerRadii:CGSizeMake(5.f, 5.f)];
    else if (side == YYSideStyleTop)
        maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                         byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)
                                               cornerRadii:CGSizeMake(5.f, 5.f)];
    else
        maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                         byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight)
                                               cornerRadii:CGSizeMake(5.f, 5.f)];
    
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = self.bounds;
    maskLayer.path = maskPath.CGPath;
    
    self.layer.mask = maskLayer;
    
    [self.layer setMasksToBounds:YES];
}

调用:

[loginBtn roundSide:YYSideStyleRight];

注意点:需设置视图的frame才能显示

OK 搞定!

iOS开发黑魔法

标签:

原文地址:http://www.cnblogs.com/ly0709/p/5539960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!