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


    如果想调用某个类的某个方法可以写成这样,这个方法来自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];  


  • 相关阅读:
    Oracle Core 学习笔记二 Transactions 和 Consistency 说明
    Oracle AUTO_SPACE_ADVISOR_JOB 说明
    Windows 下 ftp 上传文件 脚本
    Oracle 11g 中 Direct path reads 特性 说明
    Linux 使用 wget 下载 Oracle 软件说明
    Oracle 10g read by other session 等待 说明
    Oracle 11g RAC INS06006 Passwordless SSH connectivity not set up between the following node(s) 解决方法
    SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
    Oracle RAC root.sh 报错 Timed out waiting for the CRS stack to start 解决方法
    Oracle RESETLOGS 和 NORESETLOGS 区别说明
  • 原文地址:https://www.cnblogs.com/lkjson/p/4337744.html
Copyright © 2011-2022 走看看