zoukankan      html  css  js  c++  java
  • UIView总结

    转自:http://langhua9527.iteye.com/blog/1377741

    如果想调用某个类的某个方法可以写成这样,这个方法来自NSObject类

    C代码  收藏代码
    1. performSelector:  
    2. performSelector:withObject:  
    3. performSelector:withObject:withObject:  

     实际调用

    C代码  收藏代码
    1. [self performSelector:@selector(displayViews) withObject:nil afterDelay:1.0f];  

      有三个方法分别是

    C代码  收藏代码
    1. //父视图   
    2. [self.view superview]  
    3. //所有子视图  
    4.  [self.view subviews]  
    5. //自身的window  
    6.  self.view.window  

    循环一个视图下面所有视图的方法

    C代码  收藏代码
    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

    C代码  收藏代码
    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. }  

     

     找出所有的父视图

    C代码  收藏代码
    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提供了大量管理视图的方法

    C代码  收藏代码
    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:  

    视图回调

    C代码  收藏代码
    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设置标记和检索视图

    C代码  收藏代码
    1. myview.tag = 1001;  
    2. [self.view viewWithTag:1001];  
    3. (UILable *)[self.view.window viewWithTag:1001];  

    视图的几何特征

    C代码  收藏代码
    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. );  

    仿射变换

    C代码  收藏代码
    1. CGAffineTransform form = CGAffineTransformMakeRotation(PI);  
    2. myview.transform = form;  

    如想复原

    C代码  收藏代码
    1. myview.transform = CGAffineTransformIdentity;  

     直接设置视图的中心

    C代码  收藏代码
    1. myview.center = CGPointMake(100,200);  

     中心

    C代码  收藏代码
    1. CGRectGetMinX  
    2. CGRectGetMinY  
    3. //X的中间值  
    4. CGRectGetMidX  
    5. //Y的中间值  
    6. CGRectGetMidY  
    7. CGRectGetMaxX  
    8. CGRectGetMaxY  

      定时器

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

      定义视图边界

    C代码  收藏代码
    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

    C代码  收藏代码
    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

    C代码  收藏代码
    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:)];  

      视图翻转

    C代码  收藏代码
    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做动画

    C代码  收藏代码
    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还可以用以下的赋值

    C代码  收藏代码
    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

    休眠一下

    C代码  收藏代码
    1. [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0f]];  

     

    一个简单的通过图片做的动画

    C代码  收藏代码
    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];  

     

  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/greywolf/p/2611543.html
Copyright © 2011-2022 走看看