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