星空网 > 软件开发 > 操作系统

iOS 自定义控件开发(中)

《iOS 自定义控件开发(上)》

《iOS 自定义控件开发(中)》

 

接上篇iOS自定义控件开发之后,我们尝试另外一种。

在Xcode的右边,会看到如下的图

iOS 自定义控件开发(中)images/loading.gif' data-original="http://images2015.cnblogs.com/blog/94448/201511/94448-20151103225237883-764026644.png" width="577" height="223" />

其中,上面有一个:Custom Class。

那就是代表着我们可以直接使用这个Custom Class来自定义我们的类咯~

#0 第一次尝试

iOS 自定义控件开发(中)

将Class字段填入我们所写的自定义控件名。

然后修改我们上次写的ChartViewController文件。删除之前的关联,重新关联这个View。

//// ChartViewController.h//// Created by Luna Gao on 15/10/29.// Copyright © 2015年 zhiqiankeji.com. All rights reserved.//#import <UIKit/UIKit.h>#import "LGChartView.h"#import "Hardware.h"@interface ChartViewController : UIViewController@property (weak, nonatomic) IBOutlet LGChartView *chartView;@end

之后删除掉viewDidLoad中所有的实例化代码,就像我们使用UILabel等原生控件一样,不再去实例化对象。

- (void)viewDidLoad {  [super viewDidLoad];}

之后再修改LGChartView,删除之前我们自定义的

- (instancetype)initWithParentView:(UIView*) view;

方法。声明以及实现均需要删除。

然后再次运行我们的代码,出现如下情况

iOS 自定义控件开发(中)

后续尝试过很多种方法进行修改,但是均没有成功。第一次尝试失败。

#1 第二次尝试

经过分析,上图的原因在于初始化时没有设置背景色,即:

- (instancetype)initWithFrame:(CGRect)frame{  frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height);  self = [super initWithFrame:frame];  if (self) {    self.backgroundColor = [UIColor clearColor];    self.autoresizesSubviews = YES;    self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;  }  return self;}

之前我们这段代码中的

self.backgroundColor = [UIColor clearColor];

这句代码,并没有执行。

尝试放在init方法中,不执行。

尝试放在initWithFrame方法中,不执行。

尝试放在initWithCoder方法中,成功!(擦擦擦!!!这方法我是无聊的时候随便试了一下,结果成功了···坑爹啊,从来没用过这个方法···没想到啊···)

这之后就简单多了~

将之前的这些设置自适应大小的代码均可删掉。

    self.autoresizesSubviews = YES;    self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

删除无用的代码,简化一下,期间不小心删掉了自定义控件中的

-(void)layoutSubviews {  [self setNeedsDisplay];}

出现如下的问题:

iOS 自定义控件开发(中)iOS 自定义控件开发(中)

可以很明显的看出,当界面旋转后,出现了变形的情况。所以,请保留此方法。

#2 终极方案

综合上述:

自定义控件,继承自UIView,在Storyboard中修改Custom Class绑定到我们的自定义控件中。

自定义控件需要实现initWithCoder方法,Storyboard中调用此方法进行初始化。

然后修改drawRect方法开始绘制自定义控件内容。

最后,不要忘记在layoutSubviews方法中调用setNeedsDisplay进行刷新。

至此,自定义控件在实例化的阶段就完成了。我们在调用的时候,可以以非常简单方便的方式来使用。




原标题:iOS 自定义控件开发(中)

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

选品前的这些功课必须做!:https://www.kjdsnews.com/a/739966.html
Amy聊跨境:各平台EPR政策一网打尽!速卖通/eBay/敦煌网/wish/Cdiscount:https://www.kjdsnews.com/a/739967.html
【亚马逊】自发货权限停用 —— 封店篇:https://www.kjdsnews.com/a/739968.html
【投放Google Ads前准备做的工作】--关键词的收集与筛选(一):https://www.kjdsnews.com/a/739969.html
【营销干货】海外社媒推广如何快速涨粉?:https://www.kjdsnews.com/a/739970.html
“泡泡机”也能爆单热卖?这款或许适合你:https://www.kjdsnews.com/a/739971.html
中国有哪些著名的酒店品牌。:https://www.vstour.cn/a/411242.html
石象湖景区门票-石象湖景区门票优惠政策:https://www.vstour.cn/a/411243.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流