Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

对比 CGRectInset 与 CGRectOffset

$
0
0

CGRectInset 与 CGRectOffset 都是通过参数改变CGRect并返回一个CGRect类型的数据。总结出两者的区别在于:CGRectInset会进行平移和缩放两个操作。CGRectOffset做的只是平移

先把苹果的官方文档做简要解释:

CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy):

通过第二个参数 dx 和第三个参数 dy 重置第一个参数 rect 作为结果返回。重置的方式为,首先将 rect 的坐标(origin)按照(dx,dy) 进行平移,然后将 rect 的大小(size) 宽度缩小2倍的 dx,高度缩小2倍的 dy。

CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy):

rect 按照(dx,dy)进行平移。

两者的具体效果如何呢?下面通过代码和程序运行结果做形象解释。

-(void)testCGRectInset
{
    UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    [view1 setBackgroundColor:[UIColor yellowColor]];//view1 设置为黄色
    [self.view addSubview:view1];

    //根据view1的大小变换后创建view2;
    CGRect view2Rect=CGRectInset(view1.frame, 20, 20);
    UIView *view2=[[UIView alloc]initWithFrame:view2Rect];
    [view2 setBackgroundColor:[UIColor redColor]];//view2 设置为红色
    [self.view addSubview:view2];
}

如下图左边第一个所示,红色视图首先按照我们给的参数做了平移 然后对大小做了缩放。这里我给的参数是正数,如果换成负数,则向反方向平移并做放大,如下图第二张所示,视图层级关系如图第三张。

这里写图片描述

同样的思路,对于 CGRectOffset ,有:

-(void)testCGRectOffset
{
    UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    [view1 setBackgroundColor:[UIColor yellowColor]];//view1 设置为黄色
    [self.view addSubview:view1];

    //根据view1的大小变换后创建view2;
    CGRect view2Rect=CGRectOffset(view1.frame, 20, 20);
    UIView *view2=[[UIView alloc]initWithFrame:view2Rect];
    [view2 setBackgroundColor:[UIColor redColor]];//view2 设置为红色
    [self.view addSubview:view2];
}

运行结果如下所示(包括参数是正数和负数两种情况):
这里写图片描述

由上图可以形象地看出,该方法只是做了平移操作,没有缩放。

作者:huangfei711 发表于2017/8/23 15:37:33 原文链接
阅读:24 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>