5月28-懶加載,HUD蒙板,plist數(shù)據(jù)

基礎(chǔ)UI控件綜合使用

要求:

寫一個程序,類似于淘寶的購物車,用戶點擊添加按鈕,就會把一件商品加入到購物車中,等購物車滿了,可以點擊刪除按鈕刪除購物
車中商品

設(shè)計思想:

把UIImageView和UITextView合并放到一個VIew中,然后用這個整體的View進(jìn)行布局,點擊添加按鈕可以

發(fā)現(xiàn)幾個控件是一個整體,可以先建立一個控件容器,然后把需要的控件都合并到這個容器中

  • 這樣可以讓一個控件移動大家一起移動
  • 使用UIView作為父控件,提高效率
  • 通過行號和列號來計算布局
  • HUD 指示器 蒙板 遮蓋
  • 添加提示框,一般使用背景半透明,文字不用半透明
  • 延時調(diào)用的方法,可以用多種方法實現(xiàn)
  • 簡書blog
  • 加載plist數(shù)據(jù),使用plist文件保存數(shù)據(jù)
  • 凡是參數(shù)名為file的傳遞的都是文件的全路徑
  • 一個NSBundle是蘋果推薦的對象資源包,用來訪問已知隊形的資源包內(nèi)部的文件,可以用來獲取文件的全路徑
  • 項目里面的資源包,主資源包里面,項目中添加的資源都會被添加到主資源包種
  • 增加資源包得問題,一般來說要同時Copy和鏈接進(jìn)去
    在項目中經(jīng)常可能會發(fā)現(xiàn)明明文件和資源在項目里面,但是不能使用,很有可能是因為沒有參與編譯和打包,不能使用info.plist
    
  • 懶加載

  • 用到時候在去加載數(shù)據(jù),用來提高效率
  • 重寫Get方法,用來解決用得時候在加載
  • 模型是專門用來存放數(shù)據(jù)的對象
  • 九宮格排版控件算法
    詳細(xì)使用
    按鈕狀態(tài)的控制
    在需要的時候添加指示器-HUD
    使用plist文件保存數(shù)據(jù)
    一個NSBundle對象對應(yīng)一個資源包(圖片、音頻、視頻、plis等文件)
    NSBundle的作用:用來訪問與之對應(yīng)的資源包內(nèi)部的文件,可以用來獲得文件的全路徑
    項目中添加的資源都會被添加到主資源包中
    [NSBundle mainBundle]關(guān)聯(lián)的就是項目的主資源包
    ??? // 加載plist文件
    ??? NSBundle *bundle = [NSBundle mainBundle];

    ??? // 利用mainBundle獲得主資源包中文件的全路徑
    ??? NSString *filepath = [bundle pathForResource:@"shops" ofType:@"plist"];

    ??? // 凡是文件參數(shù)為File,傳遞的都是文件全路徑
    ??? self.shops = [NSArray arrayWithContentsOfFile:filepath];
    懶加載
    加載plist數(shù)據(jù)(比較大)
    懶加載:用到時再去加載,而且也只加載一次
    在調(diào)用的時候會用到Get方法
    通過重寫Get方法,來實現(xiàn)懶加載
    // 重寫shops的get方法,實現(xiàn)在調(diào)用的時候才加載數(shù)據(jù) : 懶加載
    - (NSArray *) shops{
    ??? if (_shops == nil){
    ??????? NSString *file = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
    ??????? self.shops = [NSArray arrayWithContentsOfFile:file];
    ??? }
    ??? return _shops;
    }
    模型
    建立一個類用來封裝數(shù)據(jù) : 數(shù)據(jù)模型類
    instancetype用來定義一個自動獲取返回值類型的函數(shù)
    // 使用構(gòu)造函數(shù)方法把數(shù)據(jù)庫文件內(nèi)容賦值給自定義數(shù)據(jù)模型類
    - (instancetype) initWithDict:(NSDictionary *)Dict{
    ??? if (self = [super init]){
    ??????? self.name = Dict[@"name"];
    ??????? self.icon = Dict[@"icon"];
    ??? }
    ??? return self;
    }

    // 類方法用來提供快捷初始化對象方法
    + (instancetype) initWihtDict:(NSDictionary *)Dict{
    ??? return [[self alloc] initWithDict:Dict];
    }
    View的封裝
    layoutSubviews的調(diào)用
    這個方法專門用來布局子控件,一般在這里設(shè)置子控件的frame
    當(dāng)控件本身的尺寸發(fā)生改變的時候,系統(tǒng)會自動調(diào)用這個方法
    - (void)layoutSubviews
    {
    ??? // 一定要調(diào)用super的layoutSubviews
    ??? [super layoutSubviews];

    ??? CGFloat shopW = self.frame.size.width;
    ??? CGFloat shopH = self.frame.size.height;
    ??? self.iconView.frame = CGRectMake(0, 0, shopW, shopW);
    ??? self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
    }
    UIButton、UIImageView、UILabel的選擇

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

    推薦閱讀更多精彩內(nèi)容