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

首頁 > 學院 > 開發設計 > 正文

(7/18)重學Standford_iOS7開發_視圖、繪制、手勢識別_課程筆記

2019-11-14 18:46:28
字體:
來源:轉載
供稿:網友

第七課:

  1、View

    一般來說,視圖是一個構造塊,代表屏幕上一塊矩形區域,定義了一個坐標空間,并在其中繪制及添加觸控事件等。

   ?、僖晥D的層級關系

      一個視圖只能有一個父視圖,可以有多個子視圖

 1 - (void)addSubview:(UIView *)aView; // 父視圖添加子視圖 2 - (void)removeFromSuperview; // 子視圖從父視圖移除自己 

   ?、赨IWindow

      UIView的頂級視圖:一般情況下,iOS應用程序中只有一個UIWindow,指當前顯示的屏幕內容。

   ?、踀IView的初始化

      a.從storyboard中初始化:awakeFromNib

      b.代碼初始化:alloc initWithFrame:

- (void)setup { ... }- (void)awakeFromNib { [self setup]; }- (id)initWithFrame:(CGRect)aRect{    self = [super initWithFrame:aRect];    [self setup];    return self;}

     ④與視圖相關的類

      a.CGFloat

      b.CGPoint:(CGFloat)x,(CGFloat)y

      c.CGSize:(CGFloat)width,(CGFloat)height

      d.CGRect:(CGPoint)origin,(CGSize)size

   ?、葑鴺讼到y

      a.像素與點的概念:每個View都有一個只讀屬性contentScaleFactor,用以標識一個點包含多少像素

      b.坐標系統屬性:(CGRect)bounds,(CGPoint)center,(CGRect)frame

        

        對于View B:  bounds = ((0,0),(200,250)) 

                frame = ((140,65),(320,320)) 

                center = (300,225) 

        此處理解視圖可以在父視圖中旋轉的概念。

    ⑥視圖的創建

      storyboard:drag

      code:alloc initWithFrame (直接使用init默認初始化為frame = CGRectZero)

1 CGRect labelRect = CGRectMake(20, 20, 50, 30);2 UILabel *label = [[UILabel alloc] initWithFrame:labelRect]; 3 label.text = @”Hello!”;4 [self.view addSubview:label];

    ?、咦远x視圖

      通過實現- (void)drawRect:(CGRect)aRect; 方法繪制內容,aRect指需要優化繪制的區域,與視圖最終性能有關(此處不作要求)

      注意:drawRect:方法不能主動調用,若需要重繪,可以調用- (void)setNeedsDisplay;或者- (void)setNeedsDisplayInRect:(CGRect)aRect;,系統會在合適的時間調用drawRect:

      a.drawRect的實現過程

        使用CoreGraphics: *獲取繪制內容的上下文

                  *創建繪制路徑(UIBezierPath)

                  *設置繪制屬性(color,font,textures,lineWidth,linecaps)

                  *描邊(strok),填充(fill)等

      b.UIBezierPath的使用

        UIBezierPath封裝好了上下文內容(上下文:指繪制的位置,內容等信息)

        UIKit調用DrawRect之前會處理好上下文內容,需要獲取當前上下文內容時使用:CGContextRef context = UIGraphicsGetCurrentContext(); 

UIBezierPath *path = [[UIBezierPath alloc] init];//創建//繪制路徑[path moveToPoint:CGPointMake(75, 10)];[path addLineToPoint:CGPointMake(160, 150)];[path addLineToPoint:CGPointMake(10, 150]);//閉合路徑[path closePath];//設置描邊和填充[[UIColor greenColor] setFill];[[UIColor redColor] setStroke];//描邊和填充[path fill]; [path stroke];
//其他用法 path.lineWidth = 2.0;//設置繪制路徑寬度UIBezierPath *roundedRect = [UIBezierPath bezierPathWithRoundedRect:(CGRect)bounds cornerRadius:(CGFloat)radius];//繪制圓角矩形//繪制橢圓UIBezierPath *oval = [UIBezierPath bezierPathWithOvalInRect:(CGRect)bounds];//剪裁視圖[roundedRect addClip];//剪裁后的視圖只能在其路徑區域內繪制,超出部分不會繪制

      c.透明度相關

        *UIColor:屬性alpha(0.0-1.0)

        *UIView:(BOOL)opaque(不透明),alpha(0.0-1.0),hidden(隱藏視圖)

        區別請看:http://blog.csdn.net/martin_liang/article/details/40739845

      d.子視圖與父視圖轉換時上下文內容變化的問題

        壓入(push),取出(pop)狀態

- (void)drawGreenCircle:(CGContextRef)ctxt{    CGContextSaveGState(ctxt);//保存當前上下文    [[UIColor greenColor] setFill];    // draw my circle    CGContextRestoreGState(ctxt);//恢復保存的上下文}- (void)drawRect:(CGRect)aRect{    CGContextRef context = UIGraphicsGetCurrentContext();    [[UIColor redColor] setFill];    // do some stuff    [self drawGreenCircle:context];    // do more stuff and expect fill color to be red}

      e.繪制文本

        使用NSAttributeString

NSAttributedString *text = ...;//創建繪制內容CGSize textSize = [text size];//獲取文本尺寸大小[text drawAtPoint:(CGPoint)p];//將文本繪制到指定位置(左上角),或者使用drawInRect也可以

      f.繪制圖片

UIImage *image = [UIImage imageNamed:@“foo.jpg”];//UIImage *image = [[UIImage alloc] initWithContentsOfFile:(NSString *)fullPath];//UIImage *image = [[UIImage alloc] initWithData:(NSData *)imageData];//使用上下文繪制UIGraphicsBeginImageContext(CGSize);// draw with CGContext functionsUIImage *myImage = UIGraphicsGetImageFromCurrentContext();UIGraphicsEndImageContext();//標準繪制[image drawAtPoint:(CGPoint)p];//[image drawInRect:(CGRect)r];//[image drawaspatternInRect:(CGRect)patRect;

      g.bounds變化時視圖的重繪

        UIView屬性:@PRoperty (nonatomic) UIViewContentMode contentMode; 

//位置重繪UIViewContentMode{Left,Right,Top,Right,BottomLeft,BottomRight,TopLeft,TopRight}//縮放重繪UIViewContentModeScale{ToFill,AspectFill,AspectFit} // bit stretching/shrinking //bounds變化時調用drawRect重繪UIViewContentModeRedraw // it is quite often that this is what you want

  2、手勢識別

    步驟:a.創建手勢識別器,添加到視圖

       b.實現手勢觸發時的調用方法

   ?、賃IGestureRecognizer

      抽象超類,所有具體手勢類的父類

   ?、谔砑邮謩菘刂?/p>

- (void)setPannableView:(UIView *)pannableView // maybe this is a setter in a Controller{          _pannableView = pannableView;          UIPanGestureRecognizer *pangr =              [[UIPanGestureRecognizer alloc] initWithTarget:pannableView action:@selector(pan:)];//target也可是視圖控制器,pan為觸發時的調用方法,由target類實現          [pannableView addGestureRecognizer:pangr];//講手勢添加到視圖}

   ?、踦an手勢的例子

- (CGPoint)translationInView:(UIView *)aView;//觸摸移動的距離- (CGPoint)velocityInView:(UIView *)aView;//移動速度- (void)setTranslation:(CGPoint)translation inView:(UIView *)aView;

   ?、艹橄蟪愄峁┑膕tate屬性

//UIGestureRecognizerStateBegin  連續手勢開始//UIGestureRecognizerStateChanged  移動//UIGestureRecognizerStateEnded//UIGestureRecognizerStateCancelled//UIGestureRecognizerStateFailed//UIGestureRecognizerStateRecognized     識別到手勢//使用舉例- (void)pan:(UIPanGestureRecognizer *)recognizer{    if ((recognizer.state == UIGestureRecognizerStateChanged) ||        (recognizer.state == UIGestureRecognizerStateEnded))     {        CGPoint translation = [recognizer translationInView:self];        // move something in myself (I’m a UIView) by translation.x and translation.y        // for example, if I were a graph and my origin was set by an @property called             origin self.origin = CGPointMake(self.origin.x+translation.x,     self.origin.y+translation.y);         [recognizer setTranslation:CGPointZero inView:self];//恢復手勢移動距離,為下次手勢識別調用初始化?    }}

   ?、萜渌謩輰傩?/p>

//UIPinchGestureRecognizer 捏合手勢@property CGFloat scale; // 縮放比例@property (readonly) CGFloat velocity; //速度(readonly)UIRotationGestureRecognizer  旋轉手勢@property CGFloat rotation; // 旋轉弧度@property (readonly) CGFloat velocity; //速度(readonly)UISwipeGestureRecognizer  滑動手勢@property UISwipeGestureRecognizerDirection direction; //方向(4)@property NSUInteger numberOfTouchesRequired; // 觸控數量UITapGestureRecognizer  點擊手勢@property NSUInteger numberOfTapsRequired; // 點擊次數@property NSUInteger numberOfTouchesRequired; //觸控數量

  3、其他

    #pragma mark - example

    編譯器標記,對方法進行分組,結果如下

  5、demo

    SuperCard:https://github.com/NSLogMeng/Stanford_iOS7_Study/commit/1505f50229e875776c323fcd08d4b80e04cfcff0

 

 

課程視頻地址:網易公開課:http://open.163.com/movie/2014/1/2/A/M9H7S9F1H_M9H80ED2A.html

       或者iTunes U搜索standford課程


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区亚洲一区| 91网站在线看| 夜夜嗨av色一区二区不卡| 日韩欧美在线中文字幕| 亚洲欧美激情一区| 亚洲美女精品成人在线视频| 精品国产区一区二区三区在线观看| 久久最新资源网| 亚洲天堂网站在线观看视频| 日韩精品视频观看| 97婷婷涩涩精品一区| 欧美日韩国产成人高清视频| 欧美极品在线视频| 国产日韩中文字幕| 国产午夜精品全部视频播放| 岛国视频午夜一区免费在线观看| 国产精品免费观看在线| 国产美女久久久| 亚洲国产成人精品电影| 91久久久久久久一区二区| 日韩高清电影免费观看完整| 亚洲人成电影在线播放| 91社影院在线观看| 国产玖玖精品视频| 日韩免费在线电影| 美女精品视频一区| 国产福利精品视频| 欧日韩不卡在线视频| 精品一区二区三区三区| 久久成人亚洲精品| 国产精品视频内| 午夜精品久久久久久久久久久久| 亚洲国产精品高清久久久| 日产日韩在线亚洲欧美| 疯狂做受xxxx欧美肥白少妇| 国产区亚洲区欧美区| 亚洲无亚洲人成网站77777| 最近2019中文字幕第三页视频| 九九视频这里只有精品| 国产精品露脸自拍| 成人精品网站在线观看| 欧美精品电影免费在线观看| 成人两性免费视频| 成人xxxxx| 一夜七次郎国产精品亚洲| 这里只有精品久久| 欧美精品免费播放| 大桥未久av一区二区三区| 一个人看的www欧美| 91香蕉嫩草神马影院在线观看| 欧美一区三区三区高中清蜜桃| 亚洲一区二区免费在线| 欧美性生交大片免费| 欧美色xxxx| 97精品国产97久久久久久春色| 国产精品夫妻激情| 国外成人免费在线播放| 国产成人97精品免费看片| 日韩免费看的电影电视剧大全| 日本19禁啪啪免费观看www| 欧美中文字幕第一页| 国产成人福利视频| 国产欧美日韩中文| 日韩av电影手机在线| 亚洲欧洲午夜一线一品| 91av在线国产| 国产精品羞羞答答| 亚洲精品不卡在线| 欧美激情亚洲国产| 成人黄色免费片| 伊人成人开心激情综合网| 国产精品日韩av| 丁香五六月婷婷久久激情| 精品丝袜一区二区三区| 日韩av色在线| 欧洲美女免费图片一区| 国产成人精品免费视频| 日韩av大片免费看| 久久天天躁狠狠躁夜夜躁2014| 日韩动漫免费观看电视剧高清| 中文字幕一区二区三区电影| 亚洲最大成人网色| 久久视频在线播放| 久久久久国产精品www| 久久久久久久久久av| 国产欧美精品一区二区三区-老狼| 国产精品69久久久久| 欧美大奶子在线| 日本中文字幕不卡免费| 国产综合在线观看视频| 91色p视频在线| 亚洲精品大尺度| 国产免费一区视频观看免费| 精品中文视频在线| 国产精品久久久久久亚洲调教| 97欧美精品一区二区三区| 国产精品国产三级国产aⅴ9色| 亚洲最大的成人网| 久久视频国产精品免费视频在线| 色天天综合狠狠色| 正在播放亚洲1区| 亚洲欧美激情四射在线日| 九九视频直播综合网| 狠狠爱在线视频一区| 国产一区二区三区免费视频| 亚洲美女性视频| 成人亚洲激情网| 久久综合久久88| 亚洲精品日韩av| 自拍偷拍亚洲一区| 久久久久久综合网天天| 亚洲永久免费观看| 热久久视久久精品18亚洲精品| 欧美电影在线播放| 欧美高清在线播放| 亚洲精品国产拍免费91在线| 色多多国产成人永久免费网站| 国产精品视频内| 国产一区视频在线播放| 亚洲一区二区三| 亚洲午夜国产成人av电影男同| 日韩一区二区欧美| 国产香蕉97碰碰久久人人| 欧美裸体xxxx极品少妇软件| 中文字幕综合一区| 91免费国产网站| 亚洲精品日韩丝袜精品| 欧美色道久久88综合亚洲精品| 欧美日韩亚洲精品内裤| 久青草国产97香蕉在线视频| 国产精品亚洲视频在线观看| 97在线免费观看视频| 欧美成人午夜激情在线| 久久久久久久久久久国产| 成人深夜直播免费观看| 日韩在线观看免费全集电视剧网站| 91国偷自产一区二区三区的观看方式| 在线观看国产精品91| 国产日韩精品在线观看| 久久精品成人动漫| 欧美日韩亚洲一区二区| 国产成人精品优优av| 欧美成人性色生活仑片| 久久好看免费视频| 欧美怡春院一区二区三区| 欧美裸体xxxx| 国产精品久久综合av爱欲tv| 尤物99国产成人精品视频| 亚洲综合国产精品| 日韩成人在线视频网站| 亚洲free性xxxx护士白浆| 欧美精品免费在线观看| 久久精品国产成人精品| 亚洲精品视频网上网址在线观看| 色哟哟网站入口亚洲精品| 国产精品激情av在线播放| 91牛牛免费视频| 亚洲春色另类小说| 日韩av有码在线| 国产欧美日韩免费看aⅴ视频| 欧美有码在线观看视频| 日本高清久久天堂| 亚洲精品久久久久中文字幕二区| 欧美www在线|