【ios11.4.1】iOS UI容器UIView 学习教程

更新时间:2019-12-07    来源:ios    手机版     字体:

【www.bbyears.com--ios】

一、关于UIVIew 的介绍

1)概念:UIView 是用于装载并展示各类控件的大容器,是iOS中所有UI控件的基类

2)UIView  初始化实例代码

UIView *view1 = [[UIView alloc] init];
view1.frame = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height/2);
view1.backgroundColor = [UIColor lightGrayColor];
view1.tag = 1000;
//alpha属性设置view的透明度
view1.alpha = 0.5;
//超出部分自动隐藏
view1.clipsToBounds = YES;
[self.view addSubview:view1];



3)sendSubviewToBack 父视图可以使用sendSubviewToBack方法将子视图放在最下层
例如:

UIView *view3 = [[UIView alloc] init];
 view3.frame = CGRectMake(45, 45, 240, 260);
 view3.backgroundColor = [UIColor blueColor];
 view3.tag = 1001;
 [view1 addSubview:view3];
    
 //父视图把某一子视图放在最下层
 [view1 sendSubviewToBack:view3];



4)bringSubviewToFront 父视图可以使用sendSubviewToBack方法将子视图放在最上层
例如:

UIView *view2 = [[UIView alloc] init];
view2.frame = CGRectMake(40, 40, 250, 250);
view2.backgroundColor = [UIColor blackColor];
view2.tag = 1001;
[view1 addSubview:view2];
//父视图把某一子视图放在最上层
[view1 bringSubviewToFront:view2];



 
5)获取self.view中所有的子视图  例如:

NSArray *subViews = self.view.subviews;

6)removeFromSuperview 将子视图从父视图中移除 例如:

[view1 removeFromSuperview];

 
7) viewWithTag 根据视图Tag标记获取视图 例如:

UIView *view = [self.view viewWithTag:1000];

 
8) hidden 隐藏视图 例如:

view.hidden = YES;


9)因为所有的控件都继承自UIVIew 所以根据控件的Tag标记可以使用viewWithTag获取控件对象

例如:

//1000 为button的Tag标记 注意:需要强转一下
UIButton *button=(UIButton*)[self.view viewWithTag:1000];



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


本文来源:http://www.bbyears.com/shoujikaifa/82596.html

热门标签

更多>>

本类排行