日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS开发之窗口和视图

發布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发之窗口和视图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?視圖就是應用程序的界面。視圖可以使用nib文件實現,也可以使用代碼創建。一個視圖也是一個響應器(UIResponder的子類)這意味著一個視圖可以與用戶交互。因此,視圖不只是用戶可看到的界面,也是可以和用戶交互的界面。

?

視圖相關結構的名稱、屬性和功能
  • CGPoint ? {x,y} ?坐標信息 ?視圖所在的坐標信息
  • CGSize ? ? {width,height} ? 寬度和高度 ?視圖所在的大小信息
  • CGRect ? ?{origin,size} ?CGPoint和CGSize的綜合 視圖所在的坐標(視圖最左上角的點)和大小信息。
視圖相關結構的函數
  • CGPointMake(x,y) 聲明位置信息
  • CGSizeMake(width,height) 聲明大小信息
  • CGRectMake(x,y,width,height) 聲明位置和大寫信息
Frame和Bounds

視圖的位置和大小可以用兩種方式來表示,一種方式是Frame(框架)、即按照其父視圖為起點,得出它自己的位置信息。另一種方式是Bound(邊界),即按照它自己為起點,得出其位置。

frame和bounds是UIView中的兩個屬性(property)。
frame指的是:該view在父view坐標系統中的位置和大小。(參照點是父親的坐標系統)
bounds指的是:該view在本身坐標系統中 的位置和大小。(參照點是本身坐標系統)

1 2 3 4 5 6 -(CGRect)frame{ return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height); } -(CGRect)bounds{ return CGRectMake(0,0,self.frame.size.width,self.frame.size.height); }

下圖中View B是View A的子視圖,那么,View B的frame屬性為origin(200,100),size(200,250),而View B的bounds屬性為origin(0,0),size(200,250)。

center屬性則用CGPoint表示矩形中心點在其父視圖中的位置,如上圖中View B的center屬性為(300,200)。

frame、bounds和center三個屬性是相互關聯、相互影響的,其中一個屬性發生變化,其他屬性也會跟著變化。

?

Screens, Windows, and Views 創建可視化界面
  • A?UIScreen?object that identifies a physical screen connected to the device.
  • A?UIWindow?object that provides drawing support for the screen.
  • A set of?UIView?objects to perform the drawing. These objects are attached to the window and draw their contents when the window asks them to.

類的繼承關系

?

UIScreen

UIScreen對象代表iOS設備的物理屏幕([UIScreen mainScreen])。此屏幕對象建立視圖布局邊界與像素空間之間的映射。它返回全屏大小(bounds)或只是應用程序占用的矩形(applicationFrame)。

1 2 3 4 5 CGrect screenBounds = [ [UIScreen mainScreen] bounds];//返回的是帶有狀態欄的Rect 對于iphone4來說screenBounds=00320480 CGRect viewBounds = [ [UIScreen mainScreen] applicationFrame];//不包含狀態欄的Rect 對于iphone4來說,viewBounds=020320460

?

UIWindow

視圖層次的最高層是應用程序窗口,窗口是UIWindow的一個實例,UIWindow是UIView的子類?。窗口的主要功能一是提供一個區域顯示視圖(容器),二是將事件分發給視圖。窗口本身不具有任何可見的內容,但它對于應用的視圖提供一個基本的窗口。應用程序應該只有一個主窗口,它占據整個屏幕形成背景,并是所有可見視圖的超視圖,其他視圖就是它的子視圖。

窗口是項目的主nib文件中的一個頂層nib對象。在應用程序運行時,系統自動裝載該nib文件,窗口被實例化。主nib文件中的另一個頂層的nib對象是應用程序委托(delegate),它有一個window輸出口(outlet)指向這個窗口。當程序運行時,系統生成該應用程序委托的一個實例。它的window屬性指向窗口。

通常我們可以采取兩種方法將view添加到UIWindow中:

1、addSubview

直接將view通過addSubview方式添加到window中,程序負責維護view的生命周期以及刷新,但是并不會為去理會view對應的ViewController,因此采用這種方法將view添加到window以后,我們還要保持view對應的ViewController的有效性,不能過早釋放。

2、rootViewController

rootViewController是UIWindow的一個遍歷方法,通過設置該屬性為要添加view對應的ViewController,UIWindow將會自動將其view添加到當前window中,同時負責ViewController和view的生命周期的維護,防止其過早釋放

UIWindow在顯示的時候會根據UIWindowLevel進行排序的,即Level高的將排在所有Level比他低的層級的前面。下面我們來看UIWindowLevel的定義:

1 2 3 4 5 typedef CGFloat UIWindowLevel; UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal; UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert; UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;

iOS系統中定義了三個window層級,其中每一個層級又可以分好多子層級(從UIWindow的頭文件中可以看到成員變量CGFloat?_windowSublevel;),不過系統并沒有把則個屬性開出來。UIWindow的默認級別是UIWindowLevelNormal。UIWindowLevelNormal<UIWindowLevelStatusBar<UIWindowLevelAlert.

UIView

視圖是UIView類的實例,負責在屏幕上定義一個矩形區域。在iPhone的應用程序中,視圖在展示用戶界面及響應用戶界面交互方面發揮關鍵作用。每個視圖對象都要負責渲染 視圖矩形區域中的內容,并響應該區域中發生的觸碰事件。這一雙重行為意味著視圖是應用程序與用戶交互的重要機制。在一個基于模型-視圖-控制器的應用程序中,視圖對象明顯屬于視圖部分。

UIView有一個超視圖(superview)屬性和一個子視圖(subviews)屬性。subviews是一個UIViews的NSArray,按照由后往前的順序放置。這有助于在代碼中訪問視圖層次結構。isDescendantOfView方法可以判斷一個視圖是否是另一個視圖的子視圖。

UIView提供了很多建立和管理視圖的方法。

1、添加視圖

  • ? ? ?insertSubview:atIndex:?? //放在子視圖數組的具體索引位置
  • ? ? ?insertSubview:aboveSubview:?? //某個子視圖前面
  • ? ? ?insertSubview:aboveSubview:?? //某個子視圖前面

2、重新排序和刪除子視圖

  • ? ? ? [parentView exchangeSubviewAtIndex:i withSubviewAtIndex:j]//交換兩個視圖的位置
  • ? ? ? bringSubviewToFront:和sendSubviewToBack://將子視圖提前活置后
  • ? ? ? [childView removeSuperview]//刪除某個視圖的子視圖

3、視圖回調

某個視圖的層次一改變,該視圖就會收到一次回調。

  • ? ?a、調用addSubivew:成功后會給該視圖發送didAddSubivew:回調,觸發UIView的子類在心增視圖時執行其他操作。
  • ? ?b、didMoveToSuperview:會通知相關視圖他們的上級視圖已經變化。
  • ? ?c、視圖移動前會發出willMoveToSuperview:回調
  • ? ?d、didMoveToWindow:回調和didMoveToSuperview:相似,從命名上能看出其區別。
  • ? ?e、willMoveToWindow:在視圖移動前發出的回調。
  • ? ? f、willRemoveToSubview:回調通知父視圖子視圖即將被刪除

?

UIView掌管直接屏幕繪圖。他的drawRect:方法提供一種低級方式來直接繪制內容,允許使用Quartz 2D調用創建和顯示任意元素,可將這兩個元素結合起來共同構建具體、可操作的界面。

當用戶觸摸屏幕時,Touchview類收集一系列點,在每個觸摸移動之處,touchesMoved:WithEvent:方法調用setNeedsDisplay。這又會觸發對drawRect:方法的調用,其中視圖將這些點繪制成線段來創建一個可視屏幕路徑。

?

以上內容參考至網絡和官方文檔:View and Window Architecture

轉載于:https://www.cnblogs.com/zsw-1993/p/4879910.html

總結

以上是生活随笔為你收集整理的iOS开发之窗口和视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av官网在线观看 | 68日本xxxxxⅹxxx22| 亚洲美女福利视频 | 91调教视频| 国产黄色录相 | 亚洲综合色自拍一区 | 亚洲最大的成人网 | 国产精品看片 | 精品理论片 | 在线黄网站| 九九成人 | 高清国产视频 | 毛片综合 | av在线导航 | 精品国产乱码久久久久夜深人妻 | xxx.国产| 秋霞午夜鲁丝一区二区老狼 | 欧洲丰满少妇做爰 | 色婷婷久久一区二区三区麻豆 | 日本亚洲黄色 | av第一页 | 精品在线视频一区二区 | 黄色片视频网站 | 日本黄色录像片 | av噜噜噜| 美女av免费在线观看 | www在线播放| 主播福利在线 | 免费观看日批视频 | 日韩午夜av | 日日夜夜一区二区 | 我的公把我弄高潮了视频 | 国产乱论 | 天堂av一区二区三区 | 综合激情网五月 | 欧美在线观看一区二区 | 蜜桃啪啪 | 青青视频网 | 青青草99| 亚洲涩涩图| 国内免费毛片 | 无码精品人妻一区二区三区影院 | 国产片高清在线观看 | 日本黄色a视频 | 美女草逼视频 | 在线观看免费中文字幕 | 国产一区二区三区在线播放无 | 久久9精品区-无套内射无码 | 国产精品99久久久久久久久久久久 | 五月av综合av国产av | 国产麻豆91 | 日本黄色免费观看 | 极品av在线 | 一本大道av | 美女视频91 | 黄色片网站免费看 | 国产三级自拍视频 | 亚洲狼人伊人 | 午夜一区二区三区在线 | 日本不卡一区二区 | 亚洲超碰在线观看 | 欧美激情午夜 | 都市激情校园春色 | 日韩影视一区二区三区 | 九色在线视频 | 成人a v视频 | 国产又粗又猛又黄又爽的视频 | 成人黄色动漫在线观看 | 国产九色91回来了 | 色综合综合色 | 色一区二区三区 | 欧美综合区 | 国产三级伦理片 | 九九九在线观看 | 日日夜夜一区二区 | 欧美成人免费在线观看视频 | 亚洲av永久无码精品 | 国产欧美精品一区二区三区 | 手机av网 | 夜夜小视频 | 一本色道久久综合 | 国产精品丝袜在线观看 | 久久精品无码一区 | 夜夜嗨av一区二区三区 | 好吊妞这里有精品 | 成人免费毛片男人用品 | 日韩黄 | 国产一区二区在线播放视频 | 亚洲欧美日韩综合 | 思思久久精品 | 依人久久| 精品乱码一区内射人妻无码 | 伊人激情影院 | 超碰97人 | 国产成人一区在线观看 | 丝袜理论片在线观看 | 国产黄色片免费看 | 国产干b| 私密spa按摩按到高潮 |