接上篇iOS自定義控件開發(fā)之后,我們嘗試另外一種。
在Xcode的右邊,會(huì)看到如下的圖

其中,上面有一個(gè):Custom Class。
那就是代表著我們可以直接使用這個(gè)Custom Class來自定義我們的類咯~

將Class字段填入我們所寫的自定義控件名。
然后修改我們上次寫的ChartViewController文件。刪除之前的關(guān)聯(lián),重新關(guān)聯(lián)這個(gè)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中所有的實(shí)例化代碼,就像我們使用UILabel等原生控件一樣,不再去實(shí)例化對(duì)象。
- (void)viewDidLoad { [super viewDidLoad];}之后再修改LGChartView,刪除之前我們自定義的
- (instancetype)initWithParentView:(UIView*) view;
方法。聲明以及實(shí)現(xiàn)均需要?jiǎng)h除。
然后再次運(yùn)行我們的代碼,出現(xiàn)如下情況

后續(xù)嘗試過很多種方法進(jìn)行修改,但是均沒有成功。第一次嘗試失敗。
經(jīng)過分析,上圖的原因在于初始化時(shí)沒有設(shè)置背景色,即:
- (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];
這句代碼,并沒有執(zhí)行。
嘗試放在init方法中,不執(zhí)行。
嘗試放在initWithFrame方法中,不執(zhí)行。
嘗試放在initWithCoder方法中,成功!(擦擦擦!??!這方法我是無聊的時(shí)候隨便試了一下,結(jié)果成功了···坑爹啊,從來沒用過這個(gè)方法···沒想到啊···)
這之后就簡(jiǎn)單多了~
將之前的這些設(shè)置自適應(yīng)大小的代碼均可刪掉。
self.autoresizesSubviews = YES; self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
刪除無用的代碼,簡(jiǎn)化一下,期間不小心刪掉了自定義控件中的
-(void)layoutSubviews { [self setNeedsDisplay];}出現(xiàn)如下的問題:


可以很明顯的看出,當(dāng)界面旋轉(zhuǎn)后,出現(xiàn)了變形的情況。所以,請(qǐng)保留此方法。
綜合上述:
自定義控件,繼承自UIView,在Storyboard中修改Custom Class綁定到我們的自定義控件中。
自定義控件需要實(shí)現(xiàn)initWithCoder方法,Storyboard會(huì)自動(dòng)調(diào)用此方法進(jìn)行初始化。
然后修改drawRect方法開始繪制自定義控件內(nèi)容。
最后,不要忘記在layoutSubviews方法中調(diào)用setNeedsDisplay進(jìn)行刷新。
至此,自定義控件在實(shí)例化的階段就完成了。我們?cè)谡{(diào)用的時(shí)候,可以以非常簡(jiǎn)單方便的方式來使用。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注