• 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];  

     

  • 相关阅读:
    [转]CR, LF, CR/LF区别与关系
    [转]Maven与nexus关系
    [转]Ubuntu默认使用root用户登录并免去输入密码
    [转]PL/SQL Developer 导入导出csv文件
    [转]关于胖客户端和瘦客户端的理解
    解决win7 安装完jdk7后,再安装jdk8出现的问题 has value '1.8', but '1.7' is required.
    [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop
    简单的多对一传输ns2仿真
    论文阅读笔记 (2007-06-09)
    一个简单的ns2实验全过程
  • 原文地址:https://www.cnblogs.com/wangpei/p/3539041.html
Copyright © 2020-2023  润新知