UI進階

第一課

1UIApplication

15121246699537.jpg

2.PCH的配置

15121249209730.jpg

3.注冊推送

以下分別是 iOS 10 之前和之后的注冊方式期虾,其中的 UNAuthorizationOptions 里還可以找到 1 個 UNAuthorizationOptionCarPlay 的值是專為車載系統(tǒng)定制的值业踢。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //iOS 10 before
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [application registerUserNotificationSettings:settings];

    //iOS 10
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"request authorization succeeded!");
        }
    }];

    return YES;
}

作者:pikacode
鏈接:http://www.reibang.com/p/2f3202b5e758
來源:簡書
著作權歸作者所有昆庇。商業(yè)轉載請聯(lián)系作者獲得授權帮辟,非商業(yè)轉載請注明出處。

4.UIWindows

  • 在程序當中,狀態(tài)欄和鍵盤,它都屬性是 個窗 .可以通過打印的 式來驗證. 設置window的層級.UIWindowLevelNormal它是 個CGFloat類型. self.window.windowLevel = UIWindowLevelNormal UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert

5.從Storyboard加載控制器

15123761360920.jpg

第二課

15124028675903.jpg

15124028927003.jpg

第三課

1.segue的底層實現(xiàn)

![15124762493040.jpg](http://upload-images.jianshu.io/upload_images/10921965-1744fef944a93417.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.通知

當控制器銷毀是記得移除通知

第四課

1.個人詳情頁代碼

- (void)viewDidLoad {
    [super viewDidLoad];

    
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    
    
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
    
    //NSLog(@"%@",NSStringFromCGRect(self.tableView.frame));
    
    //1.凡是在導航條下面的scrollView.默認會設置偏移量.UIEdgeInsetsMake(64, 0, 0, 0)
    //self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
    
    //不要自動設置偏移量
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    //讓導航條隱藏
    //self.navigationController.navigationBar.hidden = YES;
    
    //導航條或者是導航條上的控件設置透明度是沒有效果.
    //self.navigationController.navigationBar.alpha = 0;
    
    //設置導航條背景(必須得要使用默認的模式UIBarMetricsDefault)
    //當背景圖片設置為Nil,系統(tǒng)會自動生成一張半透明的圖片,設置為導航條背景
    
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
    
    //當調用contentInset會自動調用scrollViewDidScroll
    self.tableView.contentInset = UIEdgeInsetsMake(244, 0, 0, 0);
    
    //設置標題
    UILabel *title = [[UILabel alloc] init];
    title.text = @"個人詳情頁";
    [title sizeToFit];
    title.textColor = [UIColor colorWithWhite:0 alpha:0];
    
    self.navigationItem.titleView = title;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    //求偏移量
    //當前點 - 最原始的點
    NSLog(@"%f",scrollView.contentOffset.y);
    CGFloat offset = scrollView.contentOffset.y - oriOfftY;
    NSLog(@"offset======%f",offset);
    
    CGFloat h = oriHeight - offset;
    if (h < 64) {
        h = 64;
    }
    self.heightConstr.constant = h;
    
   
    //根據(jù)透明度來生成圖片
    //找最大值/
    CGFloat alpha = offset * 1 / 136.0;
    if (alpha >= 1) {
        alpha = 0.99;
    }
    
    //拿到標題
    UILabel *titleL = (UILabel *)self.navigationItem.titleView;
    titleL.textColor = [UIColor colorWithWhite:0 alpha:alpha];
    
    //把顏色生成圖片
    UIColor *alphaColor = [UIColor colorWithWhite:1 alpha:alpha];
    //把顏色生成圖片
    UIImage *alphaImage = [UIImage imageWithColor:alphaColor];
    //修改導航條背景圖片
    [self.navigationController.navigationBar setBackgroundImage:alphaImage forBarMetrics:UIBarMetricsDefault];
    

    
    
    
}

2.歸檔

15126589415829.jpg
15126589471912.jpg

第五課

1.事件傳遞

  • 1.當一個控件如果它的父控件不能夠接收事件,那么它里面子控件也是不能接收事件的
  • 2.當一個控件隱藏的時候,它里面的子控件也跟著隱藏
  • 3.當一個控件透明的時候,它里面的子控件也跟著透明

模擬系統(tǒng)的hitText方法

//作用:去尋找最適合的View
//什么時候調用:當一個事件傳遞給當前View,就會調用.
//返回值:返回的是誰,誰就是最適合的View(就會調用最適合的View的touch方法)
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
   
    //1.判斷自己能否接收事件
    if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {
        return nil;
    }
    //2.判斷當前點在不在當前View.
    if (![self pointInside:point withEvent:event]) {
        return nil;
    }
    //3.從后往前遍歷自己的子控件.讓子控件重復前兩步操作,(把事件傳遞給,讓子控件調用hitTest)
    int count = (int)self.subviews.count;
    for (int i = count - 1; i >= 0; i--) {
        //取出每一個子控件
        UIView *chileV =  self.subviews[i];
        //把當前的點轉換成子控件從標系上的點.
        CGPoint childP = [self convertPoint:point toView:chileV];
        UIView *fitView = [chileV hitTest:childP withEvent:event];
        //判斷有沒有找到最適合的View
        if(fitView){
            return fitView;
        }
    }
    
    //4.沒有找到比它自己更適合的View.那么它自己就是最適合的View
    return self;
    
}



//作用:判斷當前點在不在它調用View,(誰調用pointInside,這個View就是誰)
//什么時候調用:它是在hitTest方法當中調用的.
//注意:point點必須得要跟它方法調用者在同一個坐標系里面
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    NSLog(@"%s",__func__);
    return YES;
}

15128269778909.jpg
![[圖片上傳中...(15129827603014.jpg-7d8817-1520410012340-0)] ](http://upload-images.jianshu.io/upload_images/10921965-89b8d5168b2a4d00.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.抽屜效果

15129827509277.jpg
15129827603014.jpg

第六課

1.定時器

1. 先要了解setNeedsDisplay
setNeedsDisplay底層會調 DrawRect 法重繪. 但是它不是  就進 重繪.它僅僅是設置了 個重繪標志,等到下 次屏幕刷新的時候才會 調 DrawRect 法.
如果使 NSTime的話,假設是0.01調  次重繪.假設屏幕0.02秒的時候它才刷新 次. 中間就會等0.01秒.
也就是每次都會等0.01秒這樣累加上去.讓變的越來越卡頓.
使 CADisplayLink時,它的定時器 法就是屏幕每次刷新的時候就會調 (通常屏幕 秒 鐘刷新60次) 它和setNeedsDisplay調 DrawRect 法的時機正好吻合,不會出間等待間隔.不會出現(xiàn) 屏幕卡頓現(xiàn)象.
2.2如何使 CADisplayLink添加定時器?
Target:哪個對象要監(jiān)聽 法.
selector:監(jiān)聽的 法名稱.
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)]; 想要讓CADisplayLink 作,必須得要把它添加到主運 循環(huán). 只要添加到主運 循環(huán), 跟模式沒有關系
[link addToRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];

2.NSAttributedString描述

字符屬性

字符屬性可以應用于 attributed string 的文本中水由。

NSString *const NSFontAttributeName;(字體)

NSString *const NSParagraphStyleAttributeName;(段落)

NSString *const NSForegroundColorAttributeName;(字體顏色)

NSString *const NSBackgroundColorAttributeName;(字體背景色)

NSString *const NSLigatureAttributeName;(連字符)

NSString *const NSKernAttributeName;(字間距)

NSString *const NSStrikethroughStyleAttributeName;(刪除線)

NSString *const NSUnderlineStyleAttributeName;(下劃線)

NSString *const NSStrokeColorAttributeName;(邊線顏色)

NSString *const NSStrokeWidthAttributeName;(邊線寬度)

NSString *const NSShadowAttributeName;(陰影)(橫豎排版)

NSString *const NSVerticalGlyphFormAttributeName;

常量

1> NSFontAttributeName(字體)

該屬性所對應的值是一個 UIFont 對象扬绪。該屬性用于改變一段文本的字體竖独。如果不指定該屬性,則默認為12-point Helvetica(Neue)挤牛。

2> NSParagraphStyleAttributeName(段落)

該屬性所對應的值是一個 NSParagraphStyle 對象莹痢。該屬性在一段文本上應用多個屬性。如果不指定該屬性墓赴,則默認為 NSParagraphStyle 的defaultParagraphStyle 方法返回的默認段落屬性竞膳。

3> NSForegroundColorAttributeName(字體顏色)

該屬性所對應的值是一個 UIColor 對象。該屬性用于指定一段文本的字體顏色竣蹦。如果不指定該屬性顶猜,則默認為黑色。

4> NSBackgroundColorAttributeName(字體背景色)

該屬性所對應的值是一個 UIColor 對象痘括。該屬性用于指定一段文本的背景顏色。如果不指定該屬性,則默認無背景色纲菌。

5> NSLigatureAttributeName(連字符)

該屬性所對應的值是一個 NSNumber 對象(整數(shù))挠日。連體字符是指某些連在一起的字符,它們采用單個的圖元符號翰舌。0 表示沒有連體字符嚣潜。1 表示使用默認的連體字符。2表示使用所有連體符號椅贱。默認值為 1(注意懂算,iOS 不支持值為 2)。

6> NSKernAttributeName(字間距)

該屬性所對應的值是一個 NSNumber 對象(整數(shù))庇麦。字母緊排指定了用于調整字距的像素點數(shù)计技。字母緊排的效果依賴于字體。值為 0 表示不使用字母緊排山橄。默認值為0垮媒。

7> NSStrikethroughStyleAttributeName(刪除線)

該屬性所對應的值是一個 NSNumber 對象(整數(shù))。該值指定是否在文字上加上刪除線航棱,該值參考“Underline Style Attributes”睡雇。默認值是NSUnderlineStyleNone。

8> NSUnderlineStyleAttributeName(下劃線)

該屬性所對應的值是一個 NSNumber 對象(整數(shù))饮醇。該值指定是否在文字上加上下劃線它抱,該值參考“Underline Style Attributes”。默認值是NSUnderlineStyleNone朴艰。

9> NSStrokeColorAttributeName(邊線顏色)

該屬性所對應的值是一個 UIColor 對象抗愁。如果該屬性不指定(默認),則等同于 NSForegroundColorAttributeName呵晚。否則蜘腌,指定為刪除線或下劃線顏色。更多細節(jié)見“Drawing attributedstrings that are both filled and stroked”饵隙。

10> NSStrokeWidthAttributeName(邊線寬度)

該屬性所對應的值是一個 NSNumber 對象(小數(shù))撮珠。該值改變描邊寬度(相對于字體size 的百分比)。默認為 0金矛,即不改變芯急。正數(shù)只改變描邊寬度。負數(shù)同時改變文字的描邊和填充寬度驶俊。例如娶耍,對于常見的空心字,這個值通常為3.0饼酿。

11> NSShadowAttributeName(陰影)

該屬性所對應的值是一個 NSShadow 對象榕酒。默認為 nil胚膊。

12> NSVerticalGlyphFormAttributeName(橫豎排版)

該屬性所對應的值是一個 NSNumber 對象(整數(shù))。0 表示橫排文本想鹰。1 表示豎排文本紊婉。在 iOS 中,總是使用橫排文本辑舷,0 以外的值都未定義喻犁。

第八課

1.CALayer的基本操作

  • 設置陰影
    • 默認圖層是有陰影的, 只不過,是透明的
      _RedView.layer.shadowOpacity = 1;
  • 設置圖片的圓角半徑
        _imageView.layer.cornerRadius = 50;
        裁剪,超出裁剪區(qū)域的部分全部裁剪掉
        _imageView.layer.masksToBounds = YES;
        注意:UIImageView當中Image并不是直接添加在層上面的.這是添加在layer當中的contents里.
        我們設置層的所有屬性它只作用在層上面.對contents里面的東西并不起作用.所以我們看不到圖片有圓角的效果.
        想要讓圖片有圓角的效果.可以把masksToBounds這個屬性設為YES,
        當設為YES,把就會把超過根層以外的東西都給裁剪掉.
  • layer的 CATransform3D屬性.
 只有旋轉的時候才可以看出3D的效果.
      旋轉
      x,y,z 分別代表x,y,z軸.
      CATransform3DMakeRotation(M_PI, 1, 0, 0);
      平移
      CATransform3DMakeTranslation(x,y,z)
      縮放
      CATransform3DMakeScale(x,y,z);
      
      可以通過KVC的方式進行設置屬性.
      但是CATransform3DMakeRotation它的值,是一個結構體, 所以要把結構轉成對象.
      NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
      [_imageView.layer setValue:value forKeyPath:@"transform.scale"];

  可以通過KVC的方式進行設置屬性.
  但是CATransform3DMakeRotation它的值,是一個結構體, 所以要把結構轉成對象.
  NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
  [_imageView.layer setValue:value forKeyPath:@"transform.scale"];

2.關于CALayer的疑惑?

  為什么要使用CGImageRef、CGColorRef?
  為了保證可移植性何缓,QuartzCore不能使用UIImage肢础、UIColor,只能使用CGImageRef碌廓、CGColorRef
  
  UIView和CALayer都能夠顯示東西,該怎樣選擇?
  對比CALayer传轰,UIView多了一個事件處理的功能。也就是說氓皱,CALayer不能處理用戶的觸摸事件路召,而UIView可以
  如果顯示出來的東西需要跟用戶進行交互的話,用UIView波材;
  如果不需要跟用戶進行交互股淡,用UIView或者CALayer都可以
  CALayer的性能會高一些,因為它少了事件處理的功能廷区,更加輕量級

3.隱式動畫

如何取消隱式動畫?
    首先要了解動畫底層是怎么做的.動畫的底層是包裝成一個事務來進行的.
    什么是事務?
    很多操作綁定在一起,當這些操作執(zhí)行完畢后,才去執(zhí)行下一個操作.
    
    開啟事務
    [CATransaction begin];
    設置事務沒有動畫
    [CATransaction setDisableActions:YES];
    設置動畫執(zhí)行的時長
    [CATransaction setAnimationDuration:2];
    
    
    提交事務
    [CATransaction commit];

核心動畫

15132255337759.jpg

1.CABasicAnimation基礎核心動畫

         
    CABasicAnimation *anim =[CABasicAnimation  animation];
    設置縮放屬性
    anim.keyPath = @"transform.scale";
    縮放到最小
    anim.toValue = @0;
    設置動畫執(zhí)行的次數(shù)
    anim.repeatCount = MAXFLOAT;
    設置動畫執(zhí)行的時長
    anim.duration = 0.25;
    設置動畫自動反轉(怎么去, 怎么回)
    anim.autoreverses = YES;
    添加動畫
    [self.heartView.layer addAnimation:anim forKey:nil];

2.圖片抖動(幀動畫)CAKeyframeAnimation

1.幀動畫介紹:
        CAKeyframeAnimation它可以在多個值之間進行動畫.
        設置多值之間的屬性為:
        后面是一個數(shù)組,就是要設置的多個值.
        anim.values = @[];
        
        它還可以根據(jù)一個路徑做動畫.
        anim.path = 自己創(chuàng)建的路徑.
    
    2.圖片抖動思路:
        其實就是做一個左右旋轉的動畫.先讓它往左邊旋轉-5,再往右邊旋轉5度,再從5度旋轉到-5度.
        就會有左右搖擺的效果了.
        
        具體實現(xiàn)代碼
        創(chuàng)建幀動畫
        CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
        設置動畫屬性為旋轉
        anim.keyPath = @"transform.rotation";
        設置屬性值為多個屬性
        anim.values = @[@(angle2radio(-5)),@(angle2radio(5)),@(angle2radio(-5))];
        設置動畫執(zhí)行次數(shù)
        anim.repeatCount = MAXFLOAT;
        添加動畫
        [_imageView.layer addAnimation:anim forKey:nil];
    
    3.根據(jù)圓形的路徑做移動的效果.
        創(chuàng)建路徑
        UIBezierPath *path = [UIBezierPath 
                              bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 100)];
       [path addLineToPoint:CGPointMake(200, 500)];
       
       把路徑設為動畫的屬性
       anim.path = path.CGPath;

3.轉場動畫CATransition

09-轉場動畫
    
    1.什么是轉場動畫?
        就是從一個場景轉換到另一個場景,像導航控制器的push效果,就是一個轉場.
    
    2.如何創(chuàng)建轉場動畫
      創(chuàng)建轉場動畫
      CATransition *anim = [CATransition animation];
      設置轉場類型
      anim.type = @"cube";
      anim.duration = 1;
      設置轉場的方向
      anim.subtype = kCATransitionFromLeft;
      設置動畫的開始位置
      anim.startProgress = 0.5;
      設置動畫的結束位置
      anim.endProgress  =0.8;
      添加動畫.了
     [_imageV.layer addAnimation:anim forKey:nil];


     要執(zhí)行動畫的代碼稱為轉場代碼.
     轉場動畫要和轉場代碼寫在同一個方法當中才有動畫效果.
     
    3.UIView進行轉場動畫
        
       [UIView transitionWithView:self.imageV duration:1 
        options:UIViewAnimationOptionTransitionFlipFromRight 
        animations:^{
            轉場代碼
        } completion:^(BOOL finished) {
            動畫執(zhí)行完畢時調用.
        }];
        
        使用UIView轉場的類型比較少.

4.動畫組CAAnimationGroup


    
    可以同時執(zhí)行多個動畫.
    創(chuàng)建組動畫
    CAAnimationGroup *group = [CAAnimationGroup animation];
    
    平移
    CABasicAnimation *anim = [CABasicAnimation animation];
    anim.keyPath = @"position.y";
    anim.toValue = @400;
    
    縮放
    CABasicAnimation *scaleAnim = [CABasicAnimation  animation];
    scaleAnim.keyPath = @"transform.scale";
    scaleAnim.toValue = @0.5;
    設置動畫組屬性
    group.animations = @[anim,scaleAnim];
    
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    添加組動畫
    [self.redView.layer addAnimation:group forKey:nil];
    
    使用動畫組的好處,不需要每次都去添加動畫,設置動畫完成時的屬性.
    只需要把要執(zhí)行的動畫,添加到動畫組的animations數(shù)組當中即可,
    最后把組動畫添加到層上面,就會自動執(zhí)行數(shù)組當中的動畫.
    動畫完成時設置的屬性也只需要設置一次.

5.UIView與核心動畫對比?

1.UIView和核心動畫區(qū)別?
   核心動畫只能添加到CALayer
   核心動畫一切都是假象唯灵,并不會改變真實的值。
   
2.什么時候使用UIView的動畫?
  如果需要與用戶交互就使用UIView的動畫.
  不需要與用戶交互可以使用核心動畫
 
3.什么場景使用核心動畫最多?
  在轉場動畫中隙轻,核心動畫的類型比較多
  根據(jù)一個路徑做動畫埠帕,只能用核心動畫(幀動畫)
  動畫組:同時做多個動畫
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玖绿,隨后出現(xiàn)的幾起案子敛瓷,更是在濱河造成了極大的恐慌,老刑警劉巖斑匪,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐籽,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚀瘸,警方通過查閱死者的電腦和手機狡蝶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮勃,“玉大人贪惹,你說我怎么就攤上這事〖偶危” “怎么了奏瞬?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵枫绅,是天一觀的道長。 經常有香客問我丝格,道長撑瞧,這世上最難降的妖魔是什么棵譬? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任显蝌,我火速辦了婚禮,結果婚禮上订咸,老公的妹妹穿的比我還像新娘曼尊。我一直安慰自己,他們只是感情好脏嚷,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布骆撇。 她就那樣靜靜地躺著,像睡著了一般父叙。 火紅的嫁衣襯著肌膚如雪神郊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天趾唱,我揣著相機與錄音涌乳,去河邊找鬼。 笑死甜癞,一個胖子當著我的面吹牛夕晓,可吹牛的內容都是我干的。 我是一名探鬼主播悠咱,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蒸辆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了析既?” 一聲冷哼從身側響起躬贡,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眼坏,沒想到半個月后拂玻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡空骚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年纺讲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤屹。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬甚,死狀恐怖,靈堂內的尸體忽然破棺而出肋坚,到底是詐尸還是另有隱情乡括,我是刑警寧澤肃廓,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站诲泌,受9級特大地震影響盲赊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜敷扫,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一哀蘑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葵第,春花似錦绘迁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哮奇,卻和暖如春膛腐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鼎俘。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工哲身, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人而芥。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓律罢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棍丐。 傳聞我的和親對象是個殘疾皇子误辑,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內容

  • iOS應用數(shù)據(jù)存儲的常用方式 XML屬性列表(plist)歸檔 Preference(偏好設置) NSKeyedA...
    SoManyDumb閱讀 167評論 0 0
  • 核心動畫 Core Animation簡介 Core Animation,中文翻譯為核心動畫歌逢,它是一組非常強大的動...
    SoManyDumb閱讀 196評論 0 0
  • Core Data Core Data框架提供了對象-關系映射(ORM)的功能巾钉,即能夠將OC對象轉化成數(shù)據(jù),保存在...
    SoManyDumb閱讀 313評論 0 0
  • 殘酷的時針飛快- 關于你的音容笑貌模糊存在- 仿佛高中記憶海底深埋- 永遠浮不上來- 舍棄了一部分記憶童趣- 我們...
    娛情飯桶說閱讀 140評論 0 3
  • 鳥的自由在天空的高 魚的自由在大海的深 馬的自由在大地的廣 人的自由在路的遠方
    文刀之元閱讀 417評論 0 1