国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

iOS自定義控件開發(fā)(中)

2019-11-14 18:00:56
字體:
供稿:網(wǎng)友

《iOS 自定義控件開發(fā)(上)》

《iOS 自定義控件開發(fā)(中)》

 

接上篇iOS自定義控件開發(fā)之后,我們嘗試另外一種。

在Xcode的右邊,會(huì)看到如下的圖

其中,上面有一個(gè):Custom Class。

那就是代表著我們可以直接使用這個(gè)Custom Class來自定義我們的類咯~

#0 第一次嘗試

將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)行修改,但是均沒有成功。第一次嘗試失敗。

#1 第二次嘗試

經(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)保留此方法。

#2 終極方案

綜合上述:

自定義控件,繼承自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)單方便的方式來使用。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泉州市| 南汇区| 水富县| 肥乡县| 长丰县| 西丰县| 石楼县| 龙泉市| 克拉玛依市| 共和县| 崇阳县| 垫江县| 信阳市| 泸水县| 蒲城县| 紫云| 乌拉特后旗| 隆安县| 汉寿县| 淮北市| 运城市| 石嘴山市| 克拉玛依市| 南木林县| 岳池县| 东海县| 曲松县| 通州市| 灵台县| 天峻县| 巴里| 罗定市| 克拉玛依市| 长春市| 泰兴市| 布拖县| 垣曲县| 沈阳市| 文山县| 仲巴县| 海兴县|