亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

解析iOS應用的UI開發中懶加載和xib的簡單使用方法

2020-07-26 03:30:19
字體:
來源:轉載
供稿:網友

懶加載

1.懶加載基本

懶加載――也稱為延遲加載,即在需要的時候才加載(效率低,占用內存?。?。所謂懶加載,寫的是其get方法.

注意:如果是懶加載的話則一定要注意先判斷是否已經有了,如果沒有那么再去進行實例化

2.使用懶加載的好處:

(1)不必將創建對象的代碼全部寫在viewDidLoad方法中,代碼的可讀性更強

(2)每個控件的getter方法中分別負責各自的實例化處理,代碼彼此之間的獨立性強,松耦合

3.代碼示例

復制代碼 代碼如下:

//
//  YYViewController.m
//  03-圖片瀏覽器初步
//
//  Created by apple on 14-5-21.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

#define POTOIMGW    200
#define POTOIMGH    300
#define POTOIMGX    60
#define  POTOIMGY    50

@interface YYViewController ()

@property(nonatomic,strong)UILabel *firstlab;
@property(nonatomic,strong)UILabel *lastlab;
@property(nonatomic,strong)UIImageView *icon;
@property(nonatomic,strong)UIButton *leftbtn;
@property(nonatomic,strong)UIButton *rightbtn;
@property(nonatomic,strong)NSArray *array;
@property(nonatomic ,assign)int i;
-(void)change;
@end


復制代碼 代碼如下:

@implementation YYViewController

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

-(void)change
{
    [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];
    //先get再set
   
    self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];
    self.lastlab.text=self.array[self.i][@"desc"];
 
    self.leftbtn.enabled=(self.i!=0);
    self.rightbtn.enabled=(self.i!=4);
}

//延遲加載
/**1.圖片的序號標簽*/
-(UILabel *)firstlab
{
    //判斷是否已經有了,若沒有,則進行實例化
    if (!_firstlab) {
        _firstlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];
        [_firstlab setTextAlignment:NSTextAlignmentCenter];
        [self.view addSubview:_firstlab];
    }
    return _firstlab;
}

/**2.圖片控件的延遲加載*/
-(UIImageView *)icon
{
     //判斷是否已經有了,若沒有,則進行實例化
    if (!_icon) {
        _icon=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];
        UIImage *image=[UIImage imageNamed:@"biaoqingdi"];
        _icon.image=image;
        [self.view addSubview:_icon];
    }
    return _icon;
}

/**3.描述控件的延遲加載*/
-(UILabel *)lastlab
{
     //判斷是否已經有了,若沒有,則進行實例化
    if (!_lastlab) {
        _lastlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];
        [_lastlab setTextAlignment:NSTextAlignmentCenter];
        [self.view addSubview:_lastlab];
    }
    return _lastlab;
}

/**4.左鍵按鈕的延遲加載*/
-(UIButton *)leftbtn
{
     //判斷是否已經有了,若沒有,則進行實例化
    if (!_leftbtn) {
        _leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];
        _leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);
        [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
        [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
        [self.view addSubview:_leftbtn];
        [_leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];
    }
    return _leftbtn;

}

/**5.右鍵按鈕的延遲加載*/
-(UIButton *)rightbtn
{
    if (!_rightbtn) {
        _rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];
        _rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);
        [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
        [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
        [self.view addSubview:_rightbtn];
        [_rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];
    }
    return _rightbtn;
}

//array的get方法
-(NSArray *)array
{
    if (_array==nil) {
        NSString *path=[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
        _array=[[NSArray alloc]initWithContentsOfFile:path];
    }
    return _array;
}

-(void)rightclick:(UIButton *)btn
{
    self.i++;
    [self change];
}

-(void)leftclick:(UIButton *)btn
{
    self.i--;
    [self change];
}

@end


xib的簡單使用
一、簡單介紹

xib和storyboard的比較,一個輕量級一個重量級。

共同點:

都用來描述軟件界面

都用Interface Builder工具來編輯

不同點:

Xib是輕量級的,用來描述局部的UI界面

Storyboard是重量級的,用來描述整個軟件的多個界面,并且能展示多個界面之間的跳轉關系

二、xib的簡單使用

1.建立xib文件

20161692144005.png (1084×552)

建立的xib文件命名為appxib.xib

20161692208829.png (1021×497)

2.對xib進行設置

  根據程序的需要,這里把view調整為自由布局

20161692224532.png (678×370)

建立view模型(設置長寬等參數)

20161692240380.png (669×222)

調整布局和內部的控件

20161692256070.png (664×278)

完成后的單個view

20161692311688.png (182×150)

3.使用xib文件的代碼示例

YYViewController.m文件代碼如下:

復制代碼 代碼如下:

//
//  YYViewController.m
//  10-xib文件的使用
//
//  Created by apple on 14-5-24.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYapp.h"

@interface YYViewController ()
@property(nonatomic,strong)NSArray *app;
@end


復制代碼 代碼如下:

@implementation YYViewController

//1.加載數據信息
-(NSArray *)app
{
    if (!_app) {
        NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        NSArray *temparray=[NSArray arrayWithContentsOfFile:path];
       
        //字典轉模型
        NSMutableArray *arrayM=[NSMutableArray array ];
        for (NSDictionary *dict in temparray) {
            [arrayM addObject:[YYapp appWithDict:dict]];
        }
        _app=arrayM;
    }
    return _app;
}

//創建界面原型
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%d",self.app.count);
   
    //九宮格布局
    int totalloc=3;
    CGFloat appviewW=80;
    CGFloat appviewH=90;
    CGFloat margin=(self.view.frame.size.width-totalloc*appviewW)/(totalloc+1);
   
    int count=self.app.count;
    for (int i=0; i<count; i++) {
       
        int row=i/totalloc;
        int loc=i%totalloc;
        CGFloat appviewX=margin + (margin +appviewW)*loc;
        CGFloat appviewY=margin + (margin +appviewH)*row;
        YYapp *app=self.app[i];
       
        //拿出xib視圖
       NSArray  *apparray= [[NSBundle mainBundle]loadNibNamed:@"appxib" owner:nil options:nil];
        UIView *appview=[apparray firstObject];
        //加載視圖
        appview.frame=CGRectMake(appviewX, appviewY, appviewW, appviewH);
       
        UIImageView *appviewImg=(UIImageView *)[appview viewWithTag:1];
        appviewImg.image=app.image;
       
        UILabel *appviewlab=(UILabel *)[appview viewWithTag:2];
        appviewlab.text=app.name;
       
        UIButton *appviewbtn=(UIButton *)[appview viewWithTag:3];
        [appviewbtn addTarget:self action:@selector(appviewbtnClick:) forControlEvents:UIControlEventTouchUpInside];
        appviewbtn.tag=i;
       
        [self.view addSubview:appview];
    }
}

/**按鈕的點擊事件*/
-(void)appviewbtnClick:(UIButton *)btn
{
    YYapp *apps=self.app[btn.tag];
    UILabel *showlab=[[UILabel alloc]initWithFrame:CGRectMake(60, 450, 200, 20)];
    [showlab setText:[NSString stringWithFormat: @"%@下載成功",apps.name]];
    [showlab setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:showlab];
    showlab.alpha=1.0;
   
    //簡單的動畫效果
    [UIView animateWithDuration:2.0 animations:^{
        showlab.alpha=0;
    } completion:^(BOOL finished) {
        [showlab removeFromSuperview];
    }];
}

@end


運行效果:

20161692327964.png (317×495)

三、對xib進行連線示例

1.連線示例

新建一個xib對應的視圖類,繼承自Uiview

20161692347466.png (1093×563)

在xib界面右上角與新建的視圖類進行關聯

20161692403139.png (503×313)

把xib和視圖類進行連線

20161692418905.png (816×394)

注意:在使用中把weak改成為強引用。否則...

2.連線后的代碼示例

YYViewController.m文件代碼如下:

復制代碼 代碼如下:

//
//  YYViewController.m
//  10-xib文件的使用
//
//  Created by apple on 14-5-24.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYapp.h"
#import "YYappview.h"

@interface YYViewController ()
@property(nonatomic,strong)NSArray *app;
@end


復制代碼 代碼如下:

@implementation YYViewController

//1.加載數據信息
-(NSArray *)app
{
    if (!_app) {
        NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        NSArray *temparray=[NSArray arrayWithContentsOfFile:path];
       
        //字典轉模型
        NSMutableArray *arrayM=[NSMutableArray array ];
        for (NSDictionary *dict in temparray) {
            [arrayM addObject:[YYapp appWithDict:dict]];
        }
        _app=arrayM;
    }
    return _app;
}

//創建界面原型
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%d",self.app.count);
   
    //九宮格布局
    int totalloc=3;
    CGFloat appviewW=80;
    CGFloat appviewH=90;
    CGFloat margin=(self.view.frame.size.width-totalloc*appviewW)/(totalloc+1);
   
    int count=self.app.count;
    for (int i=0; i<count; i++) {
       
        int row=i/totalloc;
        int loc=i%totalloc;
        CGFloat appviewX=margin + (margin +appviewW)*loc;
        CGFloat appviewY=margin + (margin +appviewH)*row;
        YYapp *app=self.app[i];
       
        //拿出xib視圖
       NSArray  *apparray= [[NSBundle mainBundle]loadNibNamed:@"appxib" owner:nil options:nil];
       
        //注意這里的類型名!
        //UIView *appview=[apparray firstObject];
        YYappview  *appview=[apparray firstObject];
      
        //加載視圖
        appview.frame=CGRectMake(appviewX, appviewY, appviewW, appviewH);
          [self.view addSubview:appview];
       
        appview.appimg.image=app.image;
        appview.applab.text=app.name;
        appview.appbtn.tag=i;
       
        [ appview.appbtn addTarget:self action:@selector(appviewbtnClick:) forControlEvents:UIControlEventTouchUpInside];
      
    }
}

/**按鈕的點擊事件*/
-(void)appviewbtnClick:(UIButton *)btn
{
    YYapp *apps=self.app[btn.tag];
    UILabel *showlab=[[UILabel alloc]initWithFrame:CGRectMake(60, 450, 200, 20)];
    [showlab setText:[NSString stringWithFormat: @"%@下載成功",apps.name]];
    [showlab setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:showlab];
    showlab.alpha=1.0;
   
    //簡單的動畫效果
    [UIView animateWithDuration:2.0 animations:^{
        showlab.alpha=0;
    } completion:^(BOOL finished) {
        [showlab removeFromSuperview];
    }];
}

@end


YYappview.h文件代碼(已經連線)
復制代碼 代碼如下:

#import <UIKit/UIKit.h>

@interface YYappview : UIView
@property (strong, nonatomic) IBOutlet UIImageView *appimg;
@property (strong, nonatomic) IBOutlet UILabel *applab;
@property (strong, nonatomic) IBOutlet UIButton *appbtn;
@end

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线观看免费| 国产在线精品成人一区二区三区| 中文字幕最新精品| 国产精品久久91| 欧美在线一区二区三区四| 91av在线免费观看| 国产久一一精品| 欧美亚洲国产日本| 91精品国产色综合久久不卡98口| 欧美大片欧美激情性色a∨久久| 91理论片午午论夜理片久久| 国产精品久久久久福利| 国产福利精品在线| 992tv在线成人免费观看| 成人免费观看49www在线观看| 欧美精品电影免费在线观看| 欧美超级免费视 在线| 日韩欧美在线视频日韩欧美在线视频| 亚洲精品免费一区二区三区| 国产成人aa精品一区在线播放| 国产精品旅馆在线| 日韩一区二区三区在线播放| xxx成人少妇69| 欧美激情国产高清| 亚洲加勒比久久88色综合| 狠狠躁夜夜躁人人爽天天天天97| 国内精品久久久久伊人av| 国产精品v日韩精品| 午夜精品久久久久久久久久久久久| 国产精品中文字幕在线| 亚洲午夜激情免费视频| 一区二区亚洲欧洲国产日韩| 国产精品欧美久久久| 欧美日韩电影在线观看| 69精品小视频| 国产精品久久久久久久久久久久久| 亚洲激情免费观看| 亚洲国产高清高潮精品美女| 亚洲成av人乱码色午夜| 91精品国产自产在线观看永久| 最新中文字幕亚洲| 色婷婷综合久久久久| 亚洲天天在线日亚洲洲精| 亚洲欧洲中文天堂| 伊人伊成久久人综合网小说| 欧美xxxwww| 欧美性生交大片免费| 日韩精品中文字幕在线观看| 日韩国产一区三区| 国产精品高潮在线| 国产ts人妖一区二区三区| 日韩欧美国产成人| 日本久久久久亚洲中字幕| 欧美福利小视频| 日韩精品免费在线视频| 亚洲电影免费在线观看| 这里只有精品久久| 亚洲欧美国产高清va在线播| 日韩视频中文字幕| 成人黄色影片在线| 色综合久久天天综线观看| 欧美亚洲日本网站| 神马久久久久久| 久久深夜福利免费观看| 日韩欧美在线视频观看| 亚洲精品美女在线观看| 欧美在线一区二区三区四| 欧美国产乱视频| 国产日韩精品在线观看| 懂色av中文一区二区三区天美| 伊人久久久久久久久久久久久| 日日骚久久av| 国产欧美一区二区三区久久| 国产精品久久久999| 国产精品日日做人人爱| 亚洲第一网站男人都懂| 国产视频精品在线| 日韩精品在线观看一区二区| 91日韩在线播放| 亚州精品天堂中文字幕| 久久久久99精品久久久久| 欧美人与物videos| 国产精品99久久久久久久久| 国内精品久久久久伊人av| 欧美黑人巨大xxx极品| 亚洲春色另类小说| 亚洲欧洲日产国产网站| 欧美自拍视频在线观看| 欧美激情小视频| xxx成人少妇69| 欧美性猛交xxxx富婆| 久久久久免费视频| 欧美成人精品在线播放| 日韩a**站在线观看| 久久综合久中文字幕青草| 欧美伊久线香蕉线新在线| 一本大道亚洲视频| 国产精品视频色| 一道本无吗dⅴd在线播放一区| 欧美激情免费观看| 日韩视频第一页| 欧美日韩美女在线| 日本高清+成人网在线观看| 日韩中文字幕视频| 在线丨暗呦小u女国产精品| 综合136福利视频在线| 日韩欧美在线观看| 亚洲免费av网址| 欧美成人精品一区二区三区| 狠狠色狠狠色综合日日小说| 久久久99免费视频| 亚洲精品www| 欧美日韩福利在线观看| 国内精品在线一区| 亚洲天堂免费视频| 国产区精品在线观看| 欧美日韩中文在线观看| 久久亚洲电影天堂| 久久久免费高清电视剧观看| 久久人人爽人人爽人人片亚洲| 日本免费久久高清视频| 国产视频精品xxxx| 日韩在线视频观看正片免费网站| 少妇av一区二区三区| 日本久久亚洲电影| 欧美日韩免费一区| 高清日韩电视剧大全免费播放在线观看| 欧美另类极品videosbestfree| 国产成人精品av| 亚洲电影中文字幕| 欧美激情性做爰免费视频| 国产欧美日韩精品丝袜高跟鞋| 91精品久久久久久| 日韩高清中文字幕| 91精品国产成人www| 日韩中文字幕免费看| 国产视频在线一区二区| 国产精品96久久久久久又黄又硬| 久久男人的天堂| 午夜精品久久久久久久99黑人| 欧美精品中文字幕一区| 日韩av快播网址| 久久视频在线直播| 国产欧美日韩免费看aⅴ视频| 成人黄色短视频在线观看| 亚洲xxx视频| 国产丝袜视频一区| 日韩欧亚中文在线| 久99九色视频在线观看| 日韩有码在线视频| 亚洲精品国精品久久99热| 久久精品视频播放| 欧美精品九九久久| 国产精品久久久久久久久久尿| 日韩av一区在线观看| 国产精品国产福利国产秒拍| 98视频在线噜噜噜国产| 一区二区三区国产视频| 国内精品久久久久| 成人网在线免费观看| 欧美老女人性生活| 在线成人激情黄色| 九九热这里只有精品6| 欧美日韩成人网|