UIView详解
UIView詳解(http://www.beyondabel.com/blog/2014/01/01/uiview/)
引言
UIView表示屏幕上的一塊矩形區域,它在App中占有絕對重要的地位,因為iOS中幾乎所有可視化控件都是UIView的子類。負責渲染區域的內容,并且響應該區域內發生的觸摸事件
目錄
- 1、UIView家族
- 2、UIView的基本屬性
- 3、幾何方法類
- 4、控制級別類
- 5、渲染類
- 6、動畫類
- 7、手勢類
- 8、移動效果類
- 9、基于布局約束類(iOS6.0)
- 10、基于布局的約束core方法(iOS 6.0)
- 11、基于約束的兼容性(iOS 6.0)
- 12、層次布局的約束(iOS 6.0)
- 13、設備大小布局約束(iOS 6.0)
- 14、布局調度(iOS 6.0)
- 15、狀態恢復(iOS 6.0)
- 16、快照 (iOS7.0)
1、UIView家族
下圖就是視圖的內層次
2、UIView的基本屬性
// UIView是否接受events事件,默認為YES
BOOL userInteractionEnabled;// 用于做標識所用,默認為0
NSInteger tag;// Core Animation layer有關,在常用方法中再詳細講解
CALayer *layer;// UIView在父視圖中的位置 如果是在變形的時候不要用frame,使用bounds和center屬性
CGRect frame;// UIView相對自己的位置 bounds的原點就是子視圖的原點
CGRect bounds;// UIView的中心點. animatable
CGPoint center;// 線性代數里面講的矩陣變換,這個是恒等變換,一般用來旋轉,縮放
CGAffineTransform transform;// 修改contentScaleFactor可以讓UIView的渲染精度提高,這樣即使在CGAffineTransform放大之后仍然能保持銳利。
CGFloat contentScaleFactor;// 是否允許多點觸摸
BOOL multipleTouchEnabled;// default is NO?決定當前視圖是否是處理觸摸事件的唯一對象
BOOL exclusiveTouch;UIView 的exclusiveTouch屬性
exclusiveTouch的意思是UIView會獨占整個Touch事件,具體的來說,就是當設置了exclusiveTouch的 UIView是事件的第一響應者,那么到你的所有手指離開前,其他的視圖UIview是不會響應任何觸摸事件的,對于多點觸摸事件,這個屬性就非常重要,值得注意的是:手勢識別(GestureRecognizers)會忽略此屬性。
列舉用途:我們知道ios是沒有GridView視圖的,通常做法是在UITableView的cell上加載幾個子視圖,來模擬實現 GridView視圖,但對于每一個子視圖來說,就需要使用exclusiveTouch,否則當同時點擊多個子視圖,那么會觸發每個子視圖的事件。當然 還有我們常說的模態對話框。
// UIView的背影顏色
UIColor backgroundColor;// UIView是否隱藏
BOOL hidden;// 為0時完全透明,為1時完全不透明。
CGFloat alpha;//在類的層次結構中,如果clipsTobounds設為YES,超出superView的部分subview就不會顯示,否則會做顯示, 默認情況下是NO。
BOOL clipsToBounds;//這是一個優化屬性,如果該值為YES, 那么繪圖在繪制該視圖的時候把整個視圖當作不透明對待。這樣,繪圖系統在執行繪圖過程中會優化一些操作并提升系統性能;如果是設置為NO, 繪圖系統將其和其他內容平等對待,不去做優化操作。為了性能方面的考量,默認被置為YES(意味著‘優化’)。
BOOL opaque; UIView *superview;// 父視圖 NSArray *subviews;// 子視圖注:frame和center都是相對于父視圖的,bounds是相對于自身的。當view完全透明和隱藏時不能響應事件。
opaque和alpha 是有關系的。 一個不透明視圖需要整個邊界里面的內容都是不透明的。基于這個原因,opaque設置為YES,要求對應的alpha必須為1.0。如果一個UIView實例opaque被設置為YES, 而同時它又沒有完全填充它的邊界(bounds),或者它包含了整個或部分的透明的內容視圖,那么將會導致未知的結果。 因此,如果視圖部分或全部支持透明,那么你必須把opaque這個值設置為NO.
?
CGRect?contentStretch 拉伸圖片屬性,已棄用。用?[UIImage resizableImageWithCapInsets:]代替。
?
?
?
3、幾何方法類
// hitTest主要用途是用來尋找那個視圖是被觸摸了
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;// 如果我們不想讓某個視圖響應事件,讓此方法返回NO就行了。默認為YES
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;舉個例子,建立一個TestView里面重載hitTest和pointInside方法:
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{[super hitTest:point withEvent:event];return self; } - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{NSLog(@"view pointInside");return YES; }然后在TestView中增加一個子視圖TestSecondView也重載這兩個方法
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{[super hitTest:point withEvent:event]; return self; } - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{NSLog(@"second view pointInside");return YES; }這里注意[super hitTest:point withEvent:event];必須要包括,否則hitTest無法調用父類的方法,這樣就沒法 使用PointInside:withEvent:進行判斷,那么就沒法進行子視圖的遍歷。當去掉這個語句的時候,觸摸事件就不可能進到子視圖中了,除非你在方法中直接返回子視圖的對象。這樣你在調試的過程中就會發現,每次你點擊一個view都會先進入到這個view的父視圖中的hitTest方法,然后 調用super的hitTest方法之后就會查找pointInside是否返回YES如果是,則就把消息傳遞個子視圖處理,子視圖用同樣的方法遞歸查找 自己的子視圖。所以從這里調試分析看,hitTest方法這種遞歸調用的方式就一目了然了。
// 將像素point由point所在視圖轉換到目標視圖view中,返回在目標視圖view中的像素值
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;// 將像素point從view中轉換到當前視圖中,返回在當前視圖中的像素值
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;// 將rect由rect所在視圖轉換到目標視圖view中,返回在目標視圖view中的rect
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;// 將rect從view中轉換到當前視圖中,返回在當前視圖中的rect
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;4、控制級別類
// 把視圖從父類移除 - (void)removeFromSuperview; // 添加子視圖到某個位置 - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index; // 更改子視圖的位置 - (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;// 添加子視圖 - (void)addSubview:(UIView *)view; // 把view放在siblingSubview下面 - (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview; // 把view放在siblingSubview上面 - (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;注:1、addSubview:和insertSubview: atIndex:的區別:
[view addSubView:oneView] == [view insertSubview:oneView atIndex:view.subviews.cout];// 將view顯示在最前面(要將一個view顯示在最前面,只要調用其父視圖的bringSubviewToFront:方法)
- (void)bringSubviewToFront:(UIView *)view;// 將view推送到背后
- (void)sendSubviewToBack:(UIView *)view;// 這個函數默認是沒有做任何事情,子類可以重寫這個函數, 當加入視圖完成后可以附加一些操作
- (void)didAddSubview:(UIView *)subview;// 將移除子視圖會調用
- (void)willRemoveSubview:(UIView *)subview;// 通知即將移動到新的父視圖中
- (void)willMoveToSuperview:(UIView *)newSuperview;// 通知已經到新父視圖
- (void)didMoveToSuperview;// 通知即將已移動到新的窗口
- (void)willMoveToWindow:(UIWindow *)newWindow;// 通知已經移動新的窗口
- (void)didMoveToWindow;當您為某個視圖添加子視圖時,UIKit 會向相應的父子視圖發送幾個消息,通知它們當前發生的狀態變化。您可以在自己的定制視圖中對諸如?willMoveToSuperview: 、 willMoveToWindow: 、?willRemoveSubview: 、?didAddSubview: 、?didMoveToSuperview?、和?didMoveToWindow這樣的方法進行重載,以便在事件發生的前后進行必要的處理,并根據發生的變化更新視圖的狀態信息。
// 判斷一個視圖是否在父視圖層中
- (BOOL)isDescendantOfView:(UIView *)view;// 獲取標記的子視圖
- (UIView *)viewWithTag:(NSInteger)tag;// 標記為需要重新布局,異步調用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定會被調用
- (void)setNeedsLayout;// 如果有需要刷新的標記,立即調用layoutSubviews進行布局(如果沒有標記,不會調用layoutSubviews)
- (void)layoutIfNeeded;// 重新布局
- (void)layoutSubviews;5、渲染類
// 重寫此方法,執行重繪
- (void)drawRect:(CGRect)rect;// 標記為需要重繪,異步調用drawRect
- (void)setNeedsDisplay;// 標記為需要局部重繪
- (void)setNeedsDisplayInRect:(CGRect)rect;注:drawRect是對receiver的重繪。setNeedDisplay在receiver標上一個需要被重新繪圖的標記,在下一個draw周期自動重繪,iphone device的刷新頻率是60hz,也就是1/60秒后重繪
6、動畫類
// 開始一個動畫
+ (void)beginAnimations:(NSString *)animationID context:(void *)context;// 執行動畫,類似數據庫的事務處理
+ (void)commitAnimations;// 設置動畫代理,默認為nil
+ (void)setAnimationDelegate:(id)delegate;// 當動畫執行開始時,執行selector方法,默認為NULL
+ (void)setAnimationWillStartSelector:(SEL)selector;// 當動畫執行結束時,執行selector方法
+ (void)setAnimationDidStopSelector:(SEL)selector;// 設置動畫時間,時間參數為double類型,默認0.2
+ (void)setAnimationDuration:(NSTimeInterval)duration;// 設置動畫延遲時間
+ (void)setAnimationDelay:(NSTimeInterval)delay;// 設置在動畫塊內部動畫內部動畫屬性改變的開始時間
+ (void)setAnimationStartDate:(NSDate *)startDate;// 設置動畫的旋轉曲度變化,默認為UIViewAnimationCurveEaseInOut.值定義在UIViewAnimationCurve結構體中。
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) { //動畫曲線// 緩慢開始,中間加速,然后減速到結束UIViewAnimationCurveEaseInOut, // 緩慢開始,加速到結束 UIViewAnimationCurveEaseIn, // 加速開始,加速到結束 UIViewAnimationCurveEaseOut, //正常速度 UIViewAnimationCurveLinear }; + (void)setAnimationCurve:(UIViewAnimationCurve)curve;// 設置動畫在動畫模塊中的重復次數
+ (void)setAnimationRepeatCount:(float)repeatCount;// 設置動畫塊中的動畫效果是否自動重復播放
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;// 設置動畫是否從當前狀態開始播放,默認為NO.
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState;// 在動畫設置過渡效果
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache;transition把一個過渡效果應用到視圖中。值定義在UIViewAnimationTransition結構體中。
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {UIViewAnimationTransitionNone, 沒有過渡UIViewAnimationTransitionFlipFromLeft, 翻轉視圖從左到右UIViewAnimationTransitionFlipFromRight, 翻轉視圖從右到左UIViewAnimationTransitionCurlUp, 從上卷動UIViewAnimationTransitionCurlDown, 從下卷動 };view:需要過渡的視圖對象。
cache:如果是YES,那么在開始和結束圖片視圖渲染一次并在動畫中創建幀;否則,視圖將會在每一幀都渲染。例如緩存,你不需要在視圖轉變中不停的更新,你只需要等到轉換完成再去更新視圖。
1、開始一個動畫塊。 2、在容器視圖中設置轉換。 3、在容器視圖中移除子視圖。 4、在容器視圖中添加子視圖。 5、結束動畫塊。// 設置是否開啟動畫,默認YES,開啟
+ (void)setAnimationsEnabled:(BOOL)enabled;// 驗證動畫是否開啟,YES開啟,NO關閉
+ (BOOL)areAnimationsEnabled;// iOS7之后替代 setAnimationsEnabled
+ (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation;// iOS4.0之后,動畫效果處理塊
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;(NSTimeInterval)duration :動畫時間
(NSTimeInterval)delay:延遲時間
(UIViewAnimationOptions)options 動畫參數
typedef NS_OPTIONS(NSUInteger, UIViewAnimationOptions) {UIViewAnimationOptionLayoutSubviews = 1 << 0,UIViewAnimationOptionAllowUserInteraction = 1 << 1, // turn on user interaction while animatingUIViewAnimationOptionBeginFromCurrentState = 1 << 2, // start all views from current value, not initial valueUIViewAnimationOptionRepeat = 1 << 3, // repeat animation indefinitelyUIViewAnimationOptionAutoreverse = 1 << 4, // if repeat, run animation back and forthUIViewAnimationOptionOverrideInheritedDuration = 1 << 5, // ignore nested durationUIViewAnimationOptionOverrideInheritedCurve = 1 << 6, // ignore nested curveUIViewAnimationOptionAllowAnimatedContent = 1 << 7, // animate contents (applies to transitions only)UIViewAnimationOptionShowHideTransitionViews = 1 << 8, // flip to/from hidden state instead of adding/removingUIViewAnimationOptionCurveEaseInOut = 0 << 16, // defaultUIViewAnimationOptionCurveEaseIn = 1 << 16,UIViewAnimationOptionCurveEaseOut = 2 << 16,UIViewAnimationOptionCurveLinear = 3 << 16,UIViewAnimationOptionTransitionNone = 0 << 20, // defaultUIViewAnimationOptionTransitionFlipFromLeft = 1 << 20,UIViewAnimationOptionTransitionFlipFromRight = 2 << 20,UIViewAnimationOptionTransitionCurlUp = 3 << 20,UIViewAnimationOptionTransitionCurlDown = 4 << 20,UIViewAnimationOptionTransitionCrossDissolve = 5 << 20,UIViewAnimationOptionTransitionFlipFromTop = 6 << 20,UIViewAnimationOptionTransitionFlipFromBottom = 7 << 20, } NS_ENUM_AVAILABLE_IOS(4_0);(void))animations :動畫效果塊
可以設置屬性如下:frame\bounds\center\transform\alpha\backgroundColor\contentStretch
completion:(void (^)(BOOL finished))completion 動畫結束塊
例:
[UIView animateWithDuration: 2.00 delay:3.00 options:UIViewAnimationOptionAllowAnimatedContentanimations:^{insertDemoTwo.alpha = 0.1;insertDemoOne.alpha = 1.0;}completion:^(BOOL finished) {[UIView animateWithDuration:3.00animations:^{insertDemoTwo.center = CGPointMake(500.0, 470.0);insertDemoOne.center = CGPointMake(140.0, 100.0);}];}];// 動畫效果處理(無延遲,無參數)iOS4.0之后,默認delay = 0.0,options = 0; + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;例:
[UIView animateWithDuration:3.00animations:^{insertDemoOne.alpha = 1.0;insertDemoTwo.alpha = 0.1;}completion:^(BOOL finished) {insertDemoTwo.center = CGPointMake(500.0, 470.0);insertDemoOne.center = CGPointMake(140.0, 100.0); }];//動畫效果處理簡單版 iOS4.0之后(delay = 0.0,options = 0,completion = NULL) + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);// 過渡動畫效果塊,iOS4.0 + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;例:
[UIView transitionWithView:insertDemoOne duration: 1.0 options:UIViewAnimationOptionTransitionFlipFromLeftanimations:^{[insertDemoTwo removeFromSuperview];[insertDemoOne addSubview:insertDemoTwo];}completion:^(BOOL finished) {insertDemoOne.backgroundColor = [UIColor brownColor];}];// 視圖之間切換的過渡動畫效果塊,iOS4 + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;+ (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray *)views options:(UIViewAnimationOptions)options animations:(void (^)(void))parallelAnimations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);7、手勢類
// 手勢識別器(iOS3.2)
NSArray *gestureRecognizers;UIKit 中UIGestureRecognizer類的子類系列如下: UITapGestureRecognizer – “輕擊”手勢。可以配置為“單擊”和“連擊”的識別。 UIPinchGestureRecognizer –“捏合”手勢。該手勢通常用于縮放視圖或改變可視組件的大小。 UIPanGestureRecognizer – “平移”手勢。識別拖拽或移動動作。 UISwipeGestureRecognizer – “輕掃”手勢。當用戶從屏幕上劃過時識別為該手勢。可以指定該動作的方向(上、下、左、右)。 UIRotationGestureRecognizer – “轉動”手勢。用戶兩指在屏幕上做相對環形運動。 UILongPressGestureRecognizer – “長按”手勢。使用1指或多指觸摸屏幕并保持一定時間。// 綁定手勢到視圖(iOS3.2)
- (void)addGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer;//從視圖中移除手勢 (iOS3.2)
- (void)removeGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer;//手勢識別處理方式在gesture recognizer視圖轉出《UIGestureRecognizerStatePossible》狀態時調用,如果返回NO,則轉換到《UIGestureRecognizerStateFailed》;如果返回YES,則繼續識別觸摸序列.(默認情況下為YES)。(iOS6.0)
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;8、移動效果類(iOS7.0)
- (void)addMotionEffect:(UIMotionEffect *)effect; - (void)removeMotionEffect:(UIMotionEffect *)effect;9、基于布局約束類(iOS6.0)
// 視圖布局約束
- (NSArray *)constraints;// 視圖布局上添加一個約束
- (void)addConstraint:(NSLayoutConstraint *)constraint;// 視圖布局上添加多個約束
- (void)addConstraints:(NSArray *)constraints;// 移除視力布局上的一個約束
- (void)removeConstraint:(NSLayoutConstraint *)constraint;// 移除視圖布局上的多個約束
- (void)removeConstraints:(NSArray *)constraints;10、基于布局的約束core方法(iOS 6.0)
// 調用新的視圖布局自動觸發,更新視圖布局上的約束
- (void)updateConstraintsIfNeeded;// 更新自定義視圖布局約束
- (void)updateConstraints;// 判斷視圖布局是否需要更新約束
- (BOOL)needsUpdateConstraints;// 設置視圖布局是否需要更新約束
- (void)setNeedsUpdateConstraints;11、基于約束的兼容性(iOS 6.0)
// 標示是否自動遵循視圖布局約束,默認為YES
- (BOOL)translatesAutoresizingMaskIntoConstraints;// 設置是否自動遵循視圖布局約束
- (void)setTranslatesAutoresizingMaskIntoConstraints:(BOOL)flag;// 返回是遵循自定義視圖布局約束
+ (BOOL)requiresConstraintBasedLayout NS_AVAILABLE_IOS(6_0);12、層次布局的約束(iOS 6.0)
// 返回矩形對于指定視圖框架
- (CGRect)alignmentRectForFrame:(CGRect)frame;// 返回框架對于指定視圖矩形
- (CGRect)frameForAlignmentRect:(CGRect)alignmentRect;// 返回自定義視圖大小
- (UIEdgeInsets)alignmentRectInsets;// 如果超出約束范圍,自動生成基線限制,以滿足視圖需求
- (UIView *)viewForBaselineLayout;// 返回放大的視圖布局軸線
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis;// 設置放大的視圖布局的軸線
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis;// 返回縮小的視圖布局的軸線
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis;// 設置縮小的視圖布局軸線
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis;13、設備大小布局約束(iOS 6.0)
// 滿足約束視圖布局的大小
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;14、布局調度(iOS 6.0)
// 返回影響視圖布局限制的軸線
- (NSArray *)constraintsAffectingLayoutForAxis:(UILayoutConstraintAxis)axis;// 返回視圖布局約束是否影響指定視圖,主要用于調試約束布局,結合exerciseAmbiguityInLayout。
- (BOOL)hasAmbiguousLayout;// 隨機改變不同效值布局視圖,主要用于調試基于約束布局的視圖
- (void)exerciseAmbiguityInLayout;15、狀態恢復(iOS 6.0)
// 標志是否支持保存,恢復視圖狀態信息
@property (nonatomic, copy) NSString *restorationIdentifier;// 保存視圖狀態相關信息
- (void) encodeRestorableStateWithCoder:(NSCoder *)coder;// 恢復和保存視圖相關信息
- (void) decodeRestorableStateWithCoder:(NSCoder *)coder;16、快照 (iOS7.0)
我們有時候可能需要取UIView對象的快照,有幾個原因,您可能希望從動畫性能改進上去分享您的應用程序的屏幕截圖。現有的方法面臨幾個問題:
1代碼不簡單 2復雜的渲染選項,比如層面罩的難再生 3OpenGL層需要特殊的事例代碼 4快照處理十分慢事實上,真的沒有任何通用的“快照”代碼可以應付所有可能的場景。 但是IOS7將會改變,UIView和UIScreen會有一些新的方法,為各種用例提供簡單的快照功能。
動畫快照 我們可能經常想對一個視圖進行動畫處理,但是視圖的動畫太復雜,要么是動畫太密集,要么就是需要額外的代碼來控制正確的行為。 例如附帶的項目,我們創建一個UIView的子類,它只是簡單的添加一些子視圖,并旋轉來生成一個有趣的幾何排列。
// 調用snapshotViewAfterScreenUpdates:方法去創建復雜視圖的快照。方法返回一個UIView,來呈現被調用的視圖的界面。用這個方法去獲取視圖快照非常有效,比制作位圖要快的多。 當獲得視圖快照后,我們把它添加到容器視圖上,并移除實際的復雜視圖。然后可以動畫處理快照視圖了:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates;- (UIView *)resizableSnapshotViewFromRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates withCapInsets:(UIEdgeInsets)capInsets; - (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates;@property(nonatomic) BOOL?clearsContextBeforeDrawing??
//決定在視圖重畫之前是否先清理視圖以前的內容,缺省值為YES
//如果你把這個屬性設為NO,那么你要保證能在 drawRect:方法中正確的繪畫。如果你的代碼
//已經做了大量優化,那么設為NO可以提高性能,尤其是在滾動時可能只需要重新繪畫視圖的一部分
@property(nonatomic) BOOL?clipsToBounds??
//決定子視圖是否被限定在當前視圖的bounds中,缺省值為NO
@property(nonatomic) UIViewContentMode?contentMode
//決定當視圖邊界變時呈現視圖內容的方式
@property(nonatomic) CGFloat?contentScaleFactor
//應用到當前視圖的比例Scale
@property(nonatomic, getter=isExclusiveTouch) BOOL?exclusiveTouch
//決定當前視圖是否是處理觸摸事件的唯一對象
@property(nonatomic, copy) NSArray *gestureRecognizers
//當前視圖所附加的手勢識別器
@property(nonatomic, getter=isHidden) BOOL?hidden
//當前視圖是否隱藏
@property(nonatomic, readonly, retain) CALayer *layer
//用于視圖渲染的核心動畫層
@property(copy, nonatomic) NSArray *motionEffects
//當前視圖的運動效果,IOS7才開始擁有
@property(nonatomic, getter=isMultipleTouchEnabled) BOOL?multipleTouchEnabled
//當前視圖是否接受多點觸控事件,缺省值為NO
@property(nonatomic, copy) NSString *restorationIdentifier
//該標示符決定該視圖是否支持恢復狀態,其實也只是個標示符而已
//個人覺得就相當于配置表視圖每個單元格時使用的標示符一樣,可以直接在內存中重用,提高了性能
//還有一點需注意,不應該簡單的定義這個標示符,因為其所屬的view controller ,還有view controller的
//所有 父view controllers都必須有一個恢復標識符
@property(nonatomic, readonly, copy) NSArray *subviews??//當前視圖的所有子視圖
@property(nonatomic, readonly) UIView *superview?//當前視圖的父視圖
@property(nonatomic) NSInteger?tag??//當前視圖的標簽
@property(nonatomic) UIViewTintAdjustmentMode?tintAdjustmentMode
//色調調整模式,開始用于IOS7
@property(nonatomic, retain) UIColor *tintColor
//色調顏色,開始用于IOS7
@property(nonatomic) CGAffineTransform?transform??//視圖的仿射變換
@property(nonatomic, getter=isUserInteractionEnabled) BOOL?userInteractionEnabled
//決定與用戶交互事件是否從被忽略并從事件隊列中移除
? posted on 2015-08-19 11:14 城之內 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/HypeCheng/p/4741685.html
總結
- 上一篇: Hibernate 一对一注释
- 下一篇: HDU1166敌兵布阵