zoukankan      html  css  js  c++  java
  • ios开发之 -- UIView总结

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

    performSelector:  
    performSelector:withObject:  
    performSelector:withObject:withObject:

     实际调用

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

    有三个方法分别是

        //父视图   
        [self.view superview]  
        //所有子视图  
         [self.view subviews]  
        //自身的window  
         self.view.window  

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

        NSArray *allSubviews(UIView *aView)  
        {  
            NSArray *results = [aView subviews];  
            for (UIView *eachView in [aView subviews])  
            {  
                NSArray *riz = allSubviews(eachView);  
                if (riz) {  
                    results = [results arrayByAddingObjectsFromArray:riz];  
                }  
            }  
            return results;  
        }  

    循环返回一个APPLICATION里面所有的VIEW

        // Return all views throughout the application  
        NSArray *allApplicationViews()  
        {  
            NSArray *results = [[UIApplication sharedApplication] windows];  
            for (UIWindow *window in [[UIApplication sharedApplication] windows])  
            {  
                NSArray *riz = allSubviews(window);  
                if (riz) results = [results arrayByAddingObjectsFromArray: riz];  
            }  
            return results;  
        }  

     找出所有的父视图

        // Return an array of parent views from the window down to the view  
        NSArray *pathToView(UIView *aView)  
        {  
            NSMutableArray *array = [NSMutableArray arrayWithObject:aView];  
            UIView *view = aView;  
            UIWindow *window = aView.window;  
            while (view != window)  
            {  
                view = [view superview];  
                [array insertObject:view atIndex:0];  
            }  
            return array;  
        }  

    UIView提供了大量管理视图的方法

        //加一个视图到一个视图里面  
        addSubview:  
        //将一个视图移到前面  
        bringSubviewToFront:  
        //将一个视图推送到背后  
        sendSubviewToBack:  
        //把视图移除  
        removeFromSuperview  
        //插入视图 并指定索引  
        insertSubview:atIndex:  
        //插入视图在某个视图之上  
        insertSubview:aboveSubview:  
        //插入视图在某个视图之下  
        insertSubview:belowSubview:  
        //交换两个位置索引的视图  
        exchangeSubviewAtIndex:withSubviewAtIndex:  

    视图回调

        //当加入视图完成后调用  
        (void)didAddSubview:(UIView *)subview  
        //当视图移动完成后调用  
        (void)didMoveToSuperview  
        //当视图移动到新的WINDOW后调用  
        (void)didMoveToWindow  
        //在删除视图之后调用  
        (void)willRemoveSubview:(UIView *)subview  
        //当移动视图之前调用  
        (void)didMoveToSuperview:(UIView *)subview  
        //当视图移动到WINDOW之前调用  
        (void)didMoveToWindow  

    给UIView设置标记和检索视图

        myview.tag = 1001;  
        [self.view viewWithTag:1001];  
        (UILable *)[self.view.window viewWithTag:1001];  

    视图的几何特征

    //框架  
    struct CGPoint {  
      CGFloat x;  
      CGFloat y;  
    };  
    typedef struct CGPoint CGPoint;  
      
    /* Sizes. */  
      
    struct CGSize {  
      CGFloat width;  
      CGFloat height;  
    };  
    typedef struct CGSize CGSize;  
      
    struct CGRect {  
      CGPoint origin;  
      CGSize size;  
    };  
    typedef struct CGRect CGRect;  
      
      
      
    CGRect rect = CGRectMake(0,0,320,480);  
    UIView *view = [[UIView allow]initWithFrame:rect];  
      
    //将String转成CGPoint 如 @”{3.0,2.5}”    {x,y}  
    CGPoint CGPointFromString (  
       NSString *string  
    );  
      
    //将String转成CGRect  @”{{3,2},{4,5}}”  {{x,y},{w, h}}  
    CGRect CGRectFromString (  
       NSString *string  
    );  
      
    //将String转成CGSize @”{3.0,2.5}” {w, h}  
    CGSize CGSizeFromString (  
       NSString *string  
    );  
      
    //CGPoint转成NSString  
    NSString * NSStringFromCGPoint (  
       CGPoint point  
    );  
      
    //CGRect转成NSString  
    NSString * NSStringFromCGRect (  
       CGRect rect  
    );  
      
    //CGSize转成NSString  
    NSString * NSStringFromCGSize (  
       CGSize size  
    );  
      
    //对一个CGRect进行修改 以这个的中心来修改 正数表示更小(缩小) 负数表示更大(放大)  
    CGRect CGRectInset (  
       CGRect rect,  
       CGFloat dx,  
       CGFloat dy  
    );  
      
    //判断两个矩形是否相交  
    bool CGRectIntersectsRect (  
       CGRect rect1,  
       CGRect rect2  
    );  
      
    //初始为0的  
    const CGPoint CGPointZero;  
    const CGRect CGRectZero;  
    const CGSize CGSizeZero;  
      
    //创建CGPoint  
    CGPoint CGPointMake (  
       CGFloat x,  
       CGFloat y  
    );  
    //创建CGRect  
    CGRect CGRectMake (  
       CGFloat x,  
       CGFloat y,  
       CGFloat width,  
       CGFloat height  
    );  
    //创建CGSize  
    CGSize CGSizeMake (  
       CGFloat width,  
       CGFloat height  
    ); 

    仿射变换

    CGAffineTransform form = CGAffineTransformMakeRotation(PI);  
    myview.transform = form; 

    如想复原

    myview.transform = CGAffineTransformIdentity;  

     直接设置视图的中心

    myview.center = CGPointMake(100,200);  

     中心

    CGRectGetMinX  
    CGRectGetMinY  
    //X的中间值  
    CGRectGetMidX  
    //Y的中间值  
    CGRectGetMidY  
    CGRectGetMaxX  
    CGRectGetMaxY 

    定时器

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

    定义视图边界

        typedef struct UIEdgeInsets {  
            CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'  
        } UIEdgeInsets;  
        //eg  
        UIEdgeInsets insets = UIEdgeInsetsMake(5, 5, 5, 5);  
        CGRect innerRect = UIEdgeInsetsInsetRect([aView bounds], insets);  
        CGRect subRect = CGRectInset(innerRect, self.frame.size.width / 2.0f, self.frame.size.height / 2.0f);  

    仿射变换补充

    //创建CGAffineTransform

        //angle 在0-2*PI之间比较好  旋转  
        CGAffineTransform transform = CGAffineTransformMakeRotation(angle);  
        //缩放   
        CGAffineTransform transform = CGAffineTransformMakeScale(0.5f,0.5f);  
        //改变位置的  
        CGAffineTransform transform = CGAffineTransformMakeTranslation(50,60);  
          
        //修改CGAffineTransform  
        //修改 缩放   
        CGAffineTransform scaled = CGAffineTransformScale(transform, degree, degree);  
        //修改 位置  
        CGAffineTransform transform = CGAffineTransformTranslate(  
           CGAffineTransform t,  
           CGFloat tx,  
           CGFloat ty  
        );  
          
        //修改角度   
        CGAffineTransform transform = CGAffineTransformRotate (  
           CGAffineTransform t,  
           CGFloat angle  
        );  
        //最后设置到VIEW  
         [self.view setTransform:scaled];  

    建立UIView动画块

       //首先建立CGContextRef

    CGContextRef context = UIGraphicsGetCurrentContext();  
    //标记动画开始  
    [UIView beginAnimations:nil context:context];  
    //定义动画加速或减速的方式  
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  
    //定义动画的时长 1秒  
    [UIView setAnimationDuration:1.0];  
    //中间处理 位置变化,大小变化,旋转,等等的  
    [[self.view viewWithTag:999] setAlpha:1.0f];  
    //标志动画块结束  
    [UIView commitAnimations];  
    //还可以设置回调  
    [UIView setAnimationDelegate:self];  
    //设置回调调用的方法  
    [UIView setAnimationDidStopSelector:@selector(animationFinished:)]; 

    视图翻转

        UIView *whiteBackdrop = [self.view viewWithTag:100];  
        // Choose left or right flip 选择左或右翻转  
        if ([(UISegmentedControl *)self.navigationItem.titleView selectedSegmentIndex]){  
        [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:whiteBackdrop cache:YES];  
        }else{  
        [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:whiteBackdrop cache:YES];  
        }  
            NSInteger purple = [[whiteBackdrop subviews] indexOfObject:[whiteBackdrop viewWithTag:999]];  
            NSInteger maroon = [[whiteBackdrop subviews] indexOfObject:[whiteBackdrop viewWithTag:998]];  
        //交换视图  
            [whiteBackdrop exchangeSubviewAtIndex:purple withSubviewAtIndex:maroon];  
          
        //还有上翻和下翻两种 如下  
        typedef enum {  
        //没有任何效果  
            UIViewAnimationTransitionNone,  
            UIViewAnimationTransitionFlipFromLeft,  
            UIViewAnimationTransitionFlipFromRight,  
            UIViewAnimationTransitionCurlUp,  
            UIViewAnimationTransitionCurlDown,  
        } UIViewAnimationTransition;  

    使用QuartzCore做动画

    //创建CATransition  
    CATransition *animation = [CATransition animation];  
    //设置代理  
    animation.delegate = self;  
    //设置动画过渡的时间  
    animation.duration = 4.0f;  
    //定义动画加速或减速的方式   
    animation.timingFunction = UIViewAnimationCurveEaseInOut;  
    //animation.type 表示设置过渡的种类 如 Fade,MoveIn,Push,Reveal  
    switch ([(UISegmentedControl *)self.navigationItem.titleView selectedSegmentIndex]) {  
            case 0:  
                animation.type = kCATransitionFade;  
                break;  
            case 1:  
                animation.type = kCATransitionMoveIn;  
                break;  
            case 2:  
                animation.type = kCATransitionPush;  
                break;  
            case 3:  
                animation.type = kCATransitionReveal;  
            default:  
                break;  
        }  
    //设置渐变的方向,上下左右  
        if (isLeft)  
            animation.subtype = kCATransitionFromRight;  
        else  
            animation.subtype = kCATransitionFromLeft;  
      
    // Perform the animation  
        UIView *whitebg = [self.view viewWithTag:10];  
        NSInteger purple = [[whitebg subviews] indexOfObject:[whitebg viewWithTag:99]];  
        NSInteger white = [[whitebg subviews] indexOfObject:[whitebg viewWithTag:100]];  
        [whitebg exchangeSubviewAtIndex:purple withSubviewAtIndex:white];  
        [[whitebg layer] addAnimation:animation forKey:@"animation"]; 

    animation.type还可以用以下的赋值

    switch (theButton.tag) {    
            case 0:    
                animation.type = @"cube";    
                break;    
            case 1:    
                animation.type = @"suckEffect";    
                break;    
            case 2:    
                animation.type = @"oglFlip";    
                break;    
            case 3:    
                animation.type = @"rippleEffect";    
                break;    
            case 4:    
                animation.type = @"pageCurl";    
                break;    
            case 5:    
                animation.type = @"pageUnCurl";    
                break;    
            case 6:    
                animation.type = @"cameraIrisHollowOpen ";    
                break;    
            case 7:    
                animation.type = @"cameraIrisHollowClose ";    
                break;    
            default:    
                break;    
        } 

    休眠一下

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

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

        // Load butterfly images  
        NSMutableArray *bflies = [NSMutableArray array];  
        for (int i = 1; i <= 17; i++){  
            [bflies addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"bf_%d", i] ofType:@"png"]]];  
        }  
        UIImageView *butterflyView = [[UIImageView alloc] initWithFrame:CGRectMake(40.0f, 300.0f, 60.0f, 60.0f)];  
        butterflyView.tag = 300;  
               //设置动画的图片  
        butterflyView.animationImages = bflies;  
               //设置时间  
        butterflyView.animationDuration = 0.75f;  
        [self.view addSubview:butterflyView];  
               //开始动画  
        [butterflyView startAnimating];  
        [butterflyView release];  

     

     

     

  • 相关阅读:
    Android基础知识
    使用Android Studio和Genymotion模拟器搭建Andriod开发环境
    【原】Java开发环境搭建
    【转】JavaScript顶级对象参考模型
    【转】在.Net中关于AOP的实现
    【转】各版本IIS下ASP.net请求处理过程区别
    【转】我们应该如何去了解JavaScript引擎的工作原理
    Linux系统编程(27)——线程控制
    Linux系统编程(26)——守护进程
    Linux系统编程(25)——终端
  • 原文地址:https://www.cnblogs.com/hero11223/p/6911841.html
Copyright © 2011-2022 走看看