苹果开发 笔记(13)

今天把别人源代码的看了一遍,发现学到了不少,收获良多。今天一整天就是为了调整结构代码。去了storyboard,完全手工代码书写界面。好现在开始记录了。
UIView 里面有一个frame 属性,里面记录了size 和 origin 的值。这两个属性值讲白一点,其实就是记录宽度(width)和高度(height),以及坐标点(x,y)。
之前一直写的时候 包括每次引用 宽度 和高度的时候,老是觉得为什么ios 不封装width 和height 和x,y 提供 我们用即可? 这样子就省下了很多工序。初学的时候,老是会写这些代码

 self.menu.frame=(CGRect){0,0,self.view.frame.size.width,self.view.frame.size.height};

看看这一串的引用也够长了。今天看到一个作者的做法就干脆扩展这个UIView 的类别 以实现 width, height, x,y的属性。这样一来我们就不用使用这样多的引用过程。这一招也挺实用。

  self.menu.frame=(CGRect){0,0,self.view.width,self.view.height};
   self.menu.frame=(CGRect){self.view.x,self.view.y,self.view.width,self.view.height};

扩展后,写起来就不用那么多 繁琐了。((- -!)xcode 第一次写居然不知道类别在哪里,后来找了文章 就记下来好了)

下面创建一个类别名为 UIView+DisPlayObject.h 和 UIView+DisPlayObject.m 点击Ios – 选择Objective-C File
这里写图片描述

选择文件类别为CateGory(类别)点击next,完成后就生成了对于的文件。
然后在相应的文件添加想要的属性值。有了这个方法后,写起来就不用那么蛋碎写frame.size.width 之类的写法。个人认为这种设计还是很有必要的。从业务而言,经常很频繁使用。这样的设计很方便也符合前端的设计思维。

这里写图片描述

#import <UIKit/UIKit.h>
@interface UIView (DisplayObject)
@property (nonatomic) CGFloat width,height,x,y;
@end
-(void) setWidth:(CGFloat)width
{
    CGRect rect = self.frame;
    rect.size.width = width;
    self.frame  = rect;
}

-(CGFloat) width
{
    return self.frame.size.width;
}


-(void) setHeight:(CGFloat)height
{
    CGRect rect = self.frame;
    rect.size.height = height;
    self.frame  = rect;
}

-(CGFloat) height
{
    return self.frame.size.height;
}

-(void) setX:(CGFloat)x
{
    CGRect rect = self.frame;
    rect.origin.x = x;
    self.frame  = rect;
}

-(CGFloat) x
{
    return self.frame.origin.x;
}

-(void) setY:(CGFloat)y
{
    CGRect rect = self.frame;
    rect.origin.y =y;
    self.frame  = rect;
}

-(CGFloat) y
{
    return self.frame.origin.y;
}

为了兼容mac , 我发现利用ifdef的做法可以兼容两者的使用。鉴于目前水平有限 只能先设计这种方式先。

除了扩展UIView外,在游戏开发过程当中,包括面板类,经常继承类似Panel 或者叫BasePanel 或者叫BaseView 这样的设计。利用好这个设计,在整个框架里面就可以自己封装业务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值