iOS知識(shí)UI篇

Size Classes 具體使用

  • 對(duì)屏幕進(jìn)行分類(lèi)

UIView和CALayer是什么關(guān)系?

  • UIView顯示在屏幕上歸功于CALayer,通過(guò)調(diào)用drawRect方法來(lái)渲染自身的內(nèi)容植影,調(diào)節(jié)CALayer屬性可以調(diào)整UIView的外觀辫秧,UIView繼承自UIResponder蚕愤,比起CALayer可以響應(yīng)用戶(hù)事件寡润,Xcode6之后可以方便的通過(guò)視圖調(diào)試功能查看圖層之間的關(guān)系
  • UIView是iOS系統(tǒng)中界面元素的基礎(chǔ)祖驱,所有的界面元素都繼承自它停士。它內(nèi)部是由Core Animation來(lái)實(shí)現(xiàn)的挖帘,它真正的繪圖部分完丽,是由一個(gè)叫CALayer(Core Animation Layer)的類(lèi)來(lái)管理恋技。UIView本身,更像是一個(gè)CALayer的管理器逻族,訪問(wèn)它的跟繪圖和坐標(biāo)有關(guān)的屬性蜻底,如frame,bounds等聘鳞,實(shí)際上內(nèi)部都是訪問(wèn)它所在CALayer的相關(guān)屬性
  • UIView有個(gè)layer屬性薄辅,可以返回它的主CALayer實(shí)例,UIView有一個(gè)layerClass方法抠璃,返回主layer所使用的類(lèi)站楚,UIView的子類(lèi),可以通過(guò)重載這個(gè)方法搏嗡,來(lái)讓UIView使用不同的CALayer來(lái)顯示窿春,如:
- (class) layerClass {
    // 使某個(gè)UIView的子類(lèi)使用GL來(lái)進(jìn)行繪制
    return ([CAEAGLLayer class]);
}
  • UIView的CALayer類(lèi)似UIView的子View樹(shù)形結(jié)構(gòu)拉一,也可以向它的layer上添加子layer,來(lái)完成某些特殊的顯示旧乞。例如下面的代碼會(huì)在目標(biāo)View上敷上一層黑色的透明薄膜蔚润。
grayCover = [[CALayer alloc]init];
grayCover.backgroudColor = [[UIColor blackColor]colorWithAlphaComponent:0.2].CGColor;
[self.layer addSubLayer:grayCover];
  • 補(bǔ)充部分,這部分有深度了尺栖,大致了解一下吧嫡纠,UIView的layer樹(shù)形在系統(tǒng)內(nèi)部被系統(tǒng)維護(hù)著三份copy
    • 邏輯樹(shù),就是代碼里可以操縱的延赌,例如更改layer的屬性等等就在這一份
    • 動(dòng)畫(huà)樹(shù)除盏,這是一個(gè)中間層,系統(tǒng)正是在這一層上更改屬性皮胡,進(jìn)行各種渲染操作
    • 顯示樹(shù)痴颊,這棵樹(shù)的內(nèi)容是當(dāng)前正被顯示在屏幕上的內(nèi)容
    • 這三棵樹(shù)的邏輯結(jié)構(gòu)都是一樣的,區(qū)別只有各自的屬性

loadView的作用屡贺?

  • loadView用來(lái)自定義view蠢棱,只要實(shí)現(xiàn)了這個(gè)方法,其他通過(guò)xib或storyboard創(chuàng)建的view都不會(huì)被加載
  • 看懂控制器view創(chuàng)建的這個(gè)圖就行

IBOutlet連出來(lái)的視圖屬性為什么可以被設(shè)置成weak?

  • 因?yàn)楦缚丶膕ubViews數(shù)組已經(jīng)對(duì)它有一個(gè)強(qiáng)引用

IB中User Defined Runtime Attributes如何使用甩栈?

  • User Defined Runtime Attributes是一個(gè)不被看重但功能非常強(qiáng)大的的特性泻仙,它能夠通過(guò)KVC的方式配置一些你在interface builder中不能配置的屬性
  • 當(dāng)你希望在IB中作盡可能多得事情,這個(gè)特性能夠幫助你編寫(xiě)更加輕量級(jí)的viewcontroller

沙盒目錄結(jié)構(gòu)是怎樣的量没?各自用于那些場(chǎng)景玉转?

  • Application:存放程序源文件,上架前經(jīng)過(guò)數(shù)字簽名殴蹄,上架后不可修改
  • Documents:常用目錄究抓,iCloud備份目錄,存放數(shù)據(jù)
  • Library
    • Caches:存放體積大又不需要備份的數(shù)據(jù)
    • Preference:設(shè)置目錄袭灯,iCloud會(huì)備份設(shè)置信息
  • tmp:存放臨時(shí)文件刺下,不會(huì)被備份,而且這個(gè)文件下的數(shù)據(jù)有可能隨時(shí)被清除的可能

pushViewController和presentViewController有什么區(qū)別

  • 兩者都是在多個(gè)試圖控制器間跳轉(zhuǎn)的函數(shù)
  • presentViewController提供的是一個(gè)模態(tài)視圖控制器(modal)
  • pushViewController提供一個(gè)控制器數(shù)組稽荧,push/pop

請(qǐng)簡(jiǎn)述UITableView的復(fù)用機(jī)制

  • 每次創(chuàng)建cell的時(shí)候通過(guò)dequeueReusableCellWithIdentifier:方法創(chuàng)建cell橘茉,它先到緩存池中找指定標(biāo)識(shí)的cell,如果沒(méi)有就直接返回nil
  • 如果沒(méi)有找到指定標(biāo)識(shí)的cell姨丈,那么會(huì)通過(guò)initWithStyle:reuseIdentifier:創(chuàng)建一個(gè)cell
  • 當(dāng)cell離開(kāi)界面就會(huì)被放到緩存池中畅卓,以供下次復(fù)用

如何高性能的給 UIImageView 加個(gè)圓角?

  • 不好的解決方案

    • 使用下面的方式會(huì)強(qiáng)制Core Animation提前渲染屏幕的離屏繪制, 而離屏繪制就會(huì)給性能帶來(lái)負(fù)面影響,會(huì)有卡頓的現(xiàn)象出現(xiàn)
    self.view.layer.cornerRadius = 5;
    self.view.layer.masksToBounds = YES;
    
  • 正確的解決方案:使用繪圖技術(shù)

- (UIImage *)circleImage
{
    // NO代表透明
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);

    // 獲得上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // 添加一個(gè)圓
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
    CGContextAddEllipseInRect(ctx, rect);

    // 裁剪
    CGContextClip(ctx);

    // 將圖片畫(huà)上去
    [self drawInRect:rect];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    // 關(guān)閉上下文
    UIGraphicsEndImageContext();

    return image;
}
  • 還有一種方案:使用了貝塞爾曲線"切割"個(gè)這個(gè)圖片, 給UIImageView 添加了的圓角蟋恬,其實(shí)也是通過(guò)繪圖技術(shù)來(lái)實(shí)現(xiàn)的
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.center = CGPointMake(200, 300);
UIImage *anotherImage = [UIImage imageNamed:@"image"];
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds
                       cornerRadius:50] addClip];
[anotherImage drawInRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.view addSubview:imageView];

使用drawRect有什么影響翁潘?

  • drawRect方法依賴(lài)Core Graphics框架來(lái)進(jìn)行自定義的繪制
  • 缺點(diǎn):它處理touch事件時(shí)每次按鈕被點(diǎn)擊后,都會(huì)用setNeddsDisplay進(jìn)行強(qiáng)制重繪歼争;而且不止一次拜马,每次單點(diǎn)事件觸發(fā)兩次執(zhí)行箱歧。這樣的話(huà)從性能的角度來(lái)說(shuō),對(duì)CPU和內(nèi)存來(lái)說(shuō)都是欠佳的一膨。特別是如果在我們的界面上有多個(gè)這樣的UIButton實(shí)例呀邢,那就會(huì)很糟糕了
  • 這個(gè)方法的調(diào)用機(jī)制也是非常特別. 當(dāng)你調(diào)用 setNeedsDisplay 方法時(shí), UIKit 將會(huì)把當(dāng)前圖層標(biāo)記為dirty,但還是會(huì)顯示原來(lái)的內(nèi)容,直到下一次的視圖渲染周期,才會(huì)將標(biāo)記為 dirty 的圖層重新建立Core Graphics上下文,然后將內(nèi)存中的數(shù)據(jù)恢復(fù)出來(lái), 再使用 CGContextRef 進(jìn)行繪制

描述下SDWebImage里面給UIImageView加載圖片的邏輯

  • SDWebImage 中為 UIImageView 提供了一個(gè)分類(lèi)UIImageView+WebCache.h, 這個(gè)分類(lèi)中有一個(gè)最常用的接口sd_setImageWithURL:placeholderImage:,會(huì)在真實(shí)圖片出現(xiàn)前會(huì)先顯示占位圖片豹绪,當(dāng)真實(shí)圖片被加載出來(lái)后在替換占位圖片
  • 加載圖片的過(guò)程大致如下:
    • 首先會(huì)在 SDWebImageCache 中尋找圖片是否有對(duì)應(yīng)的緩存, 它會(huì)以u(píng)rl 作為數(shù)據(jù)的索引先在內(nèi)存中尋找是否有對(duì)應(yīng)的緩存
    • 如果緩存未找到就會(huì)利用通過(guò)MD5處理過(guò)的key來(lái)繼續(xù)在磁盤(pán)中查詢(xún)對(duì)應(yīng)的數(shù)據(jù), 如果找到了, 就會(huì)把磁盤(pán)中的數(shù)據(jù)加載到內(nèi)存中价淌,并將圖片顯示出來(lái)
    • 如果在內(nèi)存和磁盤(pán)緩存中都沒(méi)有找到,就會(huì)向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求瞒津,開(kāi)始下載圖片
    • 下載后的圖片會(huì)加入緩存中蝉衣,并寫(xiě)入磁盤(pán)中
    • 整個(gè)獲取圖片的過(guò)程都是在子線程中執(zhí)行,獲取到圖片后回到主線程將圖片顯示出來(lái)

設(shè)計(jì)個(gè)簡(jiǎn)單的圖片內(nèi)存緩存器

  • 類(lèi)似上面SDWebImage實(shí)現(xiàn)原理即可
  • 一定要有移除策略:釋放數(shù)據(jù)模型對(duì)象

控制器的生命周期

  • 就是問(wèn)的view的生命周期巷蚪,下面已經(jīng)按方法執(zhí)行順序進(jìn)行了排序
// 自定義控制器view病毡,這個(gè)方法只有實(shí)現(xiàn)了才會(huì)執(zhí)行
- (void)loadView
{
    self.view = [[UIView alloc] init];
    self.view.backgroundColor = [UIColor orangeColor];
}
// view是懶加載,只要view加載完畢就調(diào)用這個(gè)方法
- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%s",__func__);
}

// view即將顯示
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSLog(@"%s",__func__);
}
// view即將開(kāi)始布局子控件
- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    NSLog(@"%s",__func__);
}
// view已經(jīng)完成子控件的布局
- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    NSLog(@"%s",__func__);
}
// view已經(jīng)出現(xiàn)
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    NSLog(@"%s",__func__);
}
// view即將消失
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    NSLog(@"%s",__func__);
}
// view已經(jīng)消失
- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    NSLog(@"%s",__func__);
}
// 收到內(nèi)存警告
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

    NSLog(@"%s",__func__);
}
// 方法已過(guò)期屁柏,即將銷(xiāo)毀view
- (void)viewWillUnload
{

}
// 方法已過(guò)期卢未,已經(jīng)銷(xiāo)毀view
- (void)viewDidUnload
{

}

你是怎么封裝一個(gè)view的

  • 可以通過(guò)純代碼或者xib的方式來(lái)封裝子控件
  • 建立一個(gè)跟view相關(guān)的模型家肯,然后將模型數(shù)據(jù)傳給view,通過(guò)模型上的數(shù)據(jù)給view的子控件賦值
/**
 *  純代碼初始化控件時(shí)一定會(huì)走這個(gè)方法
 */
- (instancetype)initWithFrame:(CGRect)frame
{
    if(self = [super initWithFrame:frame])
    {
        [self setup];
    }

    return self;
}

/**
 *  通過(guò)xib初始化控件時(shí)一定會(huì)走這個(gè)方法
 */
- (id)initWithCoder:(NSCoder *)aDecoder
{
    if(self = [super initWithCoder:aDecoder])
    {
        [self setup];
    }

    return self;
}

- (void)setup
{
    // 初始化代碼
}

如何進(jìn)行iOS6、7的適配

  • 通過(guò)判斷版本來(lái)控制拱烁,來(lái)執(zhí)行響應(yīng)的代碼
  • 功能適配:保證同一個(gè)功能在6实愚、7上都能用
  • UI適配:保證各自的顯示風(fēng)格
// iOS版本為7.0以上(包含7.0)
#define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue]>=7.0)

如何渲染UILabel的文字噪径?

  • 通過(guò)NSAttributedString/NSMutableAttributedString(富文本)

UIScrollView的contentSize能否在viewDidLoad中設(shè)置换帜?

  • 因?yàn)閁IScrollView的內(nèi)容尺寸是根據(jù)其內(nèi)部的內(nèi)容來(lái)決定的,所以是可以在viewDidLoad中設(shè)置的
  • 補(bǔ)充:(這僅僅是一種特殊情況)
    • 前提涯塔,控制器B是控制器A的一個(gè)子控制器肌稻,且控制器B的內(nèi)容只在控制器A的view的部分區(qū)域中顯示
    • 假設(shè)控制器B的view中有一個(gè)UIScrollView這樣一個(gè)子控件
    • 如果此時(shí)在控制器B的viewDidLoad中設(shè)置UIScrollView的contentSize的話(huà)會(huì)導(dǎo)致不準(zhǔn)確的問(wèn)題
    • 因?yàn)槿魏慰刂破鞯膙iew在viewDidLoad的時(shí)候的尺寸都是不準(zhǔn)確的,如果有子控件的尺寸依賴(lài)父控件的尺寸匕荸,在這個(gè)方法中設(shè)置會(huì)導(dǎo)致子控件的frame不準(zhǔn)確爹谭,所以這時(shí)應(yīng)該在下面的方法中設(shè)置子控件的尺寸
-(void)viewDidLayoutSubviews;

觸摸事件的傳遞

  • 觸摸事件的傳遞是從父控件傳遞到子控件
  • 如果父控件不能接收觸摸事件,那么子控件就不可能接收到觸摸事件
  • 不能接受觸摸事件的四種情況
    • 不接收用戶(hù)交互每聪,即:userInteractionEnabled = NO
    • 隱藏旦棉,即:hidden = YES
    • 透明齿风,即:alpha <= 0.01
    • 未啟用药薯,即:enabled = NO
  • 提示:UIImageView的userInteractionEnabled默認(rèn)就是NO,因此UIImageView以及它的子控件默認(rèn)是不能接收觸摸事件的
  • 如何找到最合適處理事件的控件:
    • 首先救斑,判斷自己能否接收觸摸事件
      • 可以通過(guò)重寫(xiě)hitTest:withEvent:方法驗(yàn)證
    • 其次童本,判斷觸摸點(diǎn)是否在自己身上
      • 對(duì)應(yīng)方法pointInside:withEvent:
    • 從后往前(先遍歷最后添加的子控件)遍歷子控件,重復(fù)前面的兩個(gè)步驟
    • 如果沒(méi)有符合條件的子控件脸候,那么就自己處理

事件響應(yīng)者鏈

  • 如果當(dāng)前view是控制器的view穷娱,那么就傳遞給控制器
  • 如果控制器不存在绑蔫,則將其傳遞給它的父控件
  • 在視圖層次結(jié)構(gòu)的最頂層視圖也不能處理接收到的事件或消息,則將事件或消息傳遞給UIWindow對(duì)象進(jìn)行處理
  • 如果UIWindow對(duì)象也不處理泵额,則將事件或消息傳遞給UIApplication對(duì)象
  • 如果UIApplication也不能處理該事件或消息配深,則將其丟棄
  • 補(bǔ)充:如何判斷上一個(gè)響應(yīng)者
    • 如果當(dāng)前這個(gè)view是控制器的view,那么控制器就是上一個(gè)響應(yīng)者
    • 如果當(dāng)前這個(gè)view不是控制器的view嫁盲,那么父控件就是上一個(gè)響應(yīng)者

如何實(shí)現(xiàn)類(lèi)似QQ的三角形頭像

  • Quartz2D
  • 使用coreGraphics裁剪出一個(gè)三角形

核心動(dòng)畫(huà)里包含什么篓叶?

  • 基本動(dòng)畫(huà)
  • 回頭自己總結(jié)吧

如何使用核心動(dòng)畫(huà)?

  • 創(chuàng)建
  • 設(shè)置相關(guān)屬性
  • 添加到CALayer上羞秤,會(huì)自動(dòng)執(zhí)行動(dòng)畫(huà)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缸托,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘾蛋,更是在濱河造成了極大的恐慌俐镐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哺哼,死亡現(xiàn)場(chǎng)離奇詭異佩抹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)取董,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)匹摇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人甲葬,你說(shuō)我怎么就攤上這事廊勃。” “怎么了经窖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵坡垫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我画侣,道長(zhǎng)冰悠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任配乱,我火速辦了婚禮溉卓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搬泥。我一直安慰自己桑寨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布忿檩。 她就那樣靜靜地躺著尉尾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燥透。 梳的紋絲不亂的頭發(fā)上沙咏,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天辨图,我揣著相機(jī)與錄音,去河邊找鬼肢藐。 笑死故河,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吆豹。 我是一名探鬼主播忧勿,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瞻讽!你這毒婦竟也來(lái)了鸳吸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤速勇,失蹤者是張志新(化名)和其女友劉穎晌砾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烦磁,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡养匈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了都伪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呕乎。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陨晶,靈堂內(nèi)的尸體忽然破棺而出猬仁,到底是詐尸還是另有隱情,我是刑警寧澤先誉,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布湿刽,位于F島的核電站,受9級(jí)特大地震影響褐耳,放射性物質(zhì)發(fā)生泄漏诈闺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一铃芦、第九天 我趴在偏房一處隱蔽的房頂上張望雅镊。 院中可真熱鬧,春花似錦刃滓、人聲如沸仁烹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晃危。三九已至叙赚,卻和暖如春老客,著一層夾襖步出監(jiān)牢的瞬間僚饭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工胧砰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳍鸵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓尉间,卻偏偏與公主長(zhǎng)得像偿乖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哲嘲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果贪薪,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫(huà)全貌眠副。在這里你可以看...
    每天刷兩次牙閱讀 8,465評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果画切,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌囱怕。在這里你可以看...
    F麥子閱讀 5,094評(píng)論 5 13
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)霍弹、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 7娃弓、不使用IB是典格,下面這樣做有什么問(wèn)題? 6台丛、請(qǐng)說(shuō)說(shuō)Layer和View的關(guān)系耍缴,以及你是如何使用它們的。 1.首先...
    AlanGe閱讀 656評(píng)論 0 1
  • 本周主要完成了聽(tīng)書(shū)播放器播放狀態(tài)與書(shū)目音頻列表挽霉,頻道列表的關(guān)聯(lián)私恬,實(shí)現(xiàn)播放進(jìn)度條的快進(jìn)快退,播放器中間頁(yè)歌詞頁(yè)的頁(yè)面...
    趙坪生閱讀 131評(píng)論 0 0