iOS 自訂控制項開發(中),ios控制項

來源:互聯網
上載者:User

iOS 自訂控制項開發(中),ios控制項

《iOS 自訂控制項開發(上)》

《iOS 自訂控制項開發(中)》

 

接上篇iOS自訂控制項開發之後,我們嘗試另外一種。

在Xcode的右邊,會看到如下的圖

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

那就是代表著我們可以直接使用這個Custom Class來自訂我們的類咯~

#0 第一次嘗試

將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;

方法。聲明以及實現均需要刪除。

然後再次運行我們的代碼,出現如下情況

後續嘗試過很多種方法進行修改,但是均沒有成功。第一次嘗試失敗。

#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];}

出現如下的問題:

可以很明顯的看出,當介面旋轉後,出現了變形的情況。所以,請保留此方法。

#2 終極方案

綜合上述:

自訂控制項,繼承自UIView,在Storyboard中修改Custom Class綁定到我們的自訂控制項中。

自訂控制項需要實現initWithCoder方法,Storyboard會自動調用此方法進行初始化。

然後修改drawRect方法開始繪製自訂控制項內容。

最後,不要忘記在layoutSubviews方法中調用setNeedsDisplay進行重新整理。

至此,自訂控制項在執行個體化的階段就完成了。我們在調用的時候,可以以非常簡單方便的方式來使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.