IOS開發之UIView總結

若是想調用某個類的某個方法能夠寫成這樣,這個方法來自NSObject類windows

 

  1. performSelector:  app

  2. performSelector:withObject:  框架

  3. performSelector:withObject:withObject:  動畫

 實際調用url

 

  1. [self performSelector:@selector(displayViews) withObject:nil afterDelay:1.0f];  spa

  有三個方法分別是代理

 

  1. //父視圖   orm

  2. [self.view superview]  blog

  3. //全部子視圖  索引

  4.  [self.view subviews]  

  5. //自身的window  

  6.  self.view.window  

循環一個視圖下面全部視圖的方法

 

  1. NSArray *allSubviews(UIView *aView)  

  2. {  

  3.     NSArray *results = [aView subviews];  

  4.     for (UIView *eachView in [aView subviews])  

  5.     {  

  6.         NSArray *riz = allSubviews(eachView);  

  7.         if (riz) {  

  8.             results = [results arrayByAddingObjectsFromArray:riz];  

  9.         }  

  10.     }  

  11.     return results;  

  12. }  

循環返回一個APPLICATION裏面全部的VIEW

 

  1. // Return all views throughout the application  

  2. NSArray *allApplicationViews()  

  3. {  

  4.     NSArray *results = [[UIApplication sharedApplication] windows];  

  5.     for (UIWindow *window in [[UIApplication sharedApplication] windows])  

  6.     {  

  7.         NSArray *riz = allSubviews(window);  

  8.         if (riz) results = [results arrayByAddingObjectsFromArray: riz];  

  9.     }  

  10.     return results;  

  11. }  

 

 找出全部的父視圖

 

  1. // Return an array of parent views from the window down to the view  

  2. NSArray *pathToView(UIView *aView)  

  3. {  

  4.     NSMutableArray *array = [NSMutableArray arrayWithObject:aView];  

  5.     UIView *view = aView;  

  6.     UIWindow *window = aView.window;  

  7.     while (view != window)  

  8.     {  

  9.         view = [view superview];  

  10.         [array insertObject:view atIndex:0];  

  11.     }  

  12.     return array;  

  13. }  

UIView提供了大量管理視圖的方法

 

  1. //加一個視圖到一個視圖裏面  

  2. addSubview:  

  3. //將一個視圖移到前面  

  4. bringSubviewToFront:  

  5. //將一個視圖推送到背後  

  6. sendSubviewToBack:  

  7. //把視圖移除  

  8. removeFromSuperview  

  9. //插入視圖 並指定索引  

  10. insertSubview:atIndex:  

  11. //插入視圖在某個視圖之上  

  12. insertSubview:aboveSubview:  

  13. //插入視圖在某個視圖之下  

  14. insertSubview:belowSubview:  

  15. //交換兩個位置索引的視圖  

  16. exchangeSubviewAtIndex:withSubviewAtIndex:  

視圖回調

 

  1. //當加入視圖完成後調用  

  2. (void)didAddSubview:(UIView *)subview  

  3. //當視圖移動完成後調用  

  4. (void)didMoveToSuperview  

  5. //當視圖移動到新的WINDOW後調用  

  6. (void)didMoveToWindow  

  7. //在刪除視圖以後調用  

  8. (void)willRemoveSubview:(UIView *)subview  

  9. //當移動視圖以前調用  

  10. (void)didMoveToSuperview:(UIView *)subview  

  11. //當視圖移動到WINDOW以前調用  

  12. (void)didMoveToWindow  

 給UIView設置標記和檢索視圖

 

  1. myview.tag = 1001;  

  2. [self.view viewWithTag:1001];  

  3. (UILable *)[self.view.window viewWithTag:1001];  

視圖的幾何特徵

 

  1. //框架  

  2. struct CGPoint {  

  3.   CGFloat x;  

  4.   CGFloat y;  

  5. };  

  6. typedef struct CGPoint CGPoint;  

  7.   

  8. /* Sizes. */  

  9.   

  10. struct CGSize {  

  11.   CGFloat width;  

  12.   CGFloat height;  

  13. };  

  14. typedef struct CGSize CGSize;  

  15.   

  16. struct CGRect {  

  17.   CGPoint origin;  

  18.   CGSize size;  

  19. };  

  20. typedef struct CGRect CGRect;  

  21.   

  22.   

  23.   

  24. CGRect rect = CGRectMake(0,0,320,480);  

  25. UIView *view = [[UIView allow]initWithFrame:rect];  

  26.   

  27. //將String轉成CGPoint 如 @」{3.0,2.5}」    {x,y}  

  28. CGPoint CGPointFromString (  

  29.    NSString *string  

  30. );  

  31.   

  32. //將String轉成CGRect  @」{{3,2},{4,5}}」  {{x,y},{w, h}}  

  33. CGRect CGRectFromString (  

  34.    NSString *string  

  35. );  

  36.   

  37. //將String轉成CGSize @」{3.0,2.5}」 {w, h}  

  38. CGSize CGSizeFromString (  

  39.    NSString *string  

  40. );  

  41.   

  42. //CGPoint轉成NSString  

  43. NSString * NSStringFromCGPoint (  

  44.    CGPoint point  

  45. );  

  46.   

  47. //CGRect轉成NSString  

  48. NSString * NSStringFromCGRect (  

  49.    CGRect rect  

  50. );  

  51.   

  52. //CGSize轉成NSString  

  53. NSString * NSStringFromCGSize (  

  54.    CGSize size  

  55. );  

  56.   

  57. //對一個CGRect進行修改 以這個的中心來修改 正數表示更小(縮小) 負數表示更大(放大)  

  58. CGRect CGRectInset (  

  59.    CGRect rect,  

  60.    CGFloat dx,  

  61.    CGFloat dy  

  62. );  

  63.   

  64. //判斷兩個矩形是否相交  

  65. bool CGRectIntersectsRect (  

  66.    CGRect rect1,  

  67.    CGRect rect2  

  68. );  

  69.   

  70. //初始爲0的  

  71. const CGPoint CGPointZero;  

  72. const CGRect CGRectZero;  

  73. const CGSize CGSizeZero;  

  74.   

  75. //建立CGPoint  

  76. CGPoint CGPointMake (  

  77.    CGFloat x,  

  78.    CGFloat y  

  79. );  

  80. //建立CGRect  

  81. CGRect CGRectMake (  

  82.    CGFloat x,  

  83.    CGFloat y,  

  84.    CGFloat width,  

  85.    CGFloat height  

  86. );  

  87. //建立CGSize  

  88. CGSize CGSizeMake (  

  89.    CGFloat width,  

  90.    CGFloat height  

  91. );  

仿射變換

 

  1. CGAffineTransform form = CGAffineTransformMakeRotation(PI);  

  2. myview.transform = form;  

如想復原

 

  1. myview.transform = CGAffineTransformIdentity;  

 直接設置視圖的中心

 

  1. myview.center = CGPointMake(100,200);  

 中心

 

  1. CGRectGetMinX  

  2. CGRectGetMinY  

  3. //X的中間值  

  4. CGRectGetMidX  

  5. //Y的中間值  

  6. CGRectGetMidY  

  7. CGRectGetMaxX  

  8. CGRectGetMaxY  

  定時器

 

  1. NSTime *timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(move:) userInfo:nil repeats:YES];  

  定義視圖邊界

  1. typedef struct UIEdgeInsets {  

  2.     CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'  

  3. } UIEdgeInsets;  

  4. //eg  

  5. UIEdgeInsets insets = UIEdgeInsetsMake(5, 5, 5, 5);  

  6. CGRect innerRect = UIEdgeInsetsInsetRect([aView bounds], insets);  

  7. CGRect subRect = CGRectInset(innerRect, self.frame.size.width / 2.0f, self.frame.size.height / 2.0f);  

仿射變換補充

//建立CGAffineTransform

  1. //angle 在0-2*PI之間比較好  旋轉  

  2. CGAffineTransform transform = CGAffineTransformMakeRotation(angle);  

  3. //縮放   

  4. CGAffineTransform transform = CGAffineTransformMakeScale(0.5f,0.5f);  

  5. //改變位置的  

  6. CGAffineTransform transform = CGAffineTransformMakeTranslation(50,60);  

  7.   

  8. //修改CGAffineTransform  

  9. //修改 縮放   

  10. CGAffineTransform scaled = CGAffineTransformScale(transform, degree, degree);  

  11. //修改 位置  

  12. CGAffineTransform transform = CGAffineTransformTranslate(  

  13.    CGAffineTransform t,  

  14.    CGFloat tx,  

  15.    CGFloat ty  

  16. );  

  17.   

  18. //修改角度   

  19. CGAffineTransform transform = CGAffineTransformRotate (  

  20.    CGAffineTransform t,  

  21.    CGFloat angle  

  22. );  

  23. //最後設置到VIEW  

  24.  [self.view setTransform:scaled];  

 

創建UIView動畫塊

   //首先創建CGContextRef

  1. CGContextRef context = UIGraphicsGetCurrentContext();  

  2. //標記動畫開始  

  3. [UIView beginAnimations:nil context:context];  

  4. //定義動畫加速或減速的方式  

  5. [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  

  6. //定義動畫的時長 1秒  

  7. [UIView setAnimationDuration:1.0];  

  8. //中間處理 位置變化,大小變化,旋轉,等等的  

  9. [[self.view viewWithTag:999] setAlpha:1.0f];  

  10. //標誌動畫塊結束  

  11. [UIView commitAnimations];  

  12. //還能夠設置回調  

  13. [UIView setAnimationDelegate:self];  

  14. //設置回調調用的方法  

  15. [UIView setAnimationDidStopSelector:@selector(animationFinished:)];  

  視圖翻轉

 

  1. UIView *whiteBackdrop = [self.view viewWithTag:100];  

  2. // Choose left or right flip 選擇左或右翻轉  

  3. if ([(UISegmentedControl *)self.navigationItem.titleView selectedSegmentIndex]){  

  4. [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:whiteBackdrop cache:YES];  

  5. }else{  

  6. [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:whiteBackdrop cache:YES];  

  7. }  

  8.     NSInteger purple = [[whiteBackdrop subviews] indexOfObject:[whiteBackdrop viewWithTag:999]];  

  9.     NSInteger maroon = [[whiteBackdrop subviews] indexOfObject:[whiteBackdrop viewWithTag:998]];  

  10. //交換視圖  

  11.     [whiteBackdrop exchangeSubviewAtIndex:purple withSubviewAtIndex:maroon];  

  12.   

  13. //還有上翻和下翻兩種 以下  

  14. typedef enum {  

  15. //沒有任何效果  

  16.     UIViewAnimationTransitionNone,  

  17.     UIViewAnimationTransitionFlipFromLeft,  

  18.     UIViewAnimationTransitionFlipFromRight,  

  19.     UIViewAnimationTransitionCurlUp,  

  20.     UIViewAnimationTransitionCurlDown,  

  21. } UIViewAnimationTransition;  

  使用QuartzCore作動畫

 

  1. //建立CATransition  

  2. CATransition *animation = [CATransition animation];  

  3. //設置代理  

  4. animation.delegate = self;  

  5. //設置動畫過渡的時間  

  6. animation.duration = 4.0f;  

  7. //定義動畫加速或減速的方式   

  8. animation.timingFunction = UIViewAnimationCurveEaseInOut;  

  9. //animation.type 表示設置過渡的種類 如 Fade,MoveIn,Push,Reveal  

  10. switch ([(UISegmentedControl *)self.navigationItem.titleView selectedSegmentIndex]) {  

  11.         case 0:  

  12.             animation.type = kCATransitionFade;  

  13.             break;  

  14.         case 1:  

  15.             animation.type = kCATransitionMoveIn;  

  16.             break;  

  17.         case 2:  

  18.             animation.type = kCATransitionPush;  

  19.             break;  

  20.         case 3:  

  21.             animation.type = kCATransitionReveal;  

  22.         default:  

  23.             break;  

  24.     }  

  25. //設置漸變的方向,上下左右  

  26.     if (isLeft)  

  27.         animation.subtype = kCATransitionFromRight;  

  28.     else  

  29.         animation.subtype = kCATransitionFromLeft;  

  30.   

  31. // Perform the animation  

  32.     UIView *whitebg = [self.view viewWithTag:10];  

  33.     NSInteger purple = [[whitebg subviews] indexOfObject:[whitebg viewWithTag:99]];  

  34.     NSInteger white = [[whitebg subviews] indexOfObject:[whitebg viewWithTag:100]];  

  35.     [whitebg exchangeSubviewAtIndex:purple withSubviewAtIndex:white];  

  36.     [[whitebg layer] addAnimation:animation forKey:@"animation"];  

 

animation.type還能夠用如下的賦值

 

  1. switch (theButton.tag) {    

  2.         case 0:    

  3.             animation.type = @"cube";    

  4.             break;    

  5.         case 1:    

  6.             animation.type = @"suckEffect";    

  7.             break;    

  8.         case 2:    

  9.             animation.type = @"oglFlip";    

  10.             break;    

  11.         case 3:    

  12.             animation.type = @"rippleEffect";    

  13.             break;    

  14.         case 4:    

  15.             animation.type = @"pageCurl";    

  16.             break;    

  17.         case 5:    

  18.             animation.type = @"pageUnCurl";    

  19.             break;    

  20.         case 6:    

  21.             animation.type = @"cameraIrisHollowOpen ";    

  22.             break;    

  23.         case 7:    

  24.             animation.type = @"cameraIrisHollowClose ";    

  25.             break;    

  26.         default:    

  27.             break;    

  28.     }    

  上面這個是轉自這裏的http://2015.iteye.com/blog/1122130

休眠一下

 

  1. [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0f]];  

 

一個簡單的經過圖片作的動畫

 

  1. // Load butterfly images  

  2. NSMutableArray *bflies = [NSMutableArray array];  

  3. for (int i = 1; i <= 17; i++){  

  4.     [bflies addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"bf_%d", i] ofType:@"png"]]];  

  5. }  

  6. UIImageView *butterflyView = [[UIImageView alloc] initWithFrame:CGRectMake(40.0f, 300.0f, 60.0f, 60.0f)];  

  7. butterflyView.tag = 300;  

  8.        //設置動畫的圖片  

  9. butterflyView.animationImages = bflies;  

  10.        //設置時間  

  11. butterflyView.animationDuration = 0.75f;  

  12. [self.view addSubview:butterflyView];  

  13.        //開始動畫  

  14. [butterflyView startAnimating];  

  15. [butterflyView release];  

相關文章
相關標籤/搜索