`

UIView相关方法

    博客分类:
  • ios
 
阅读更多

 [self.view insertSubview:girlView belowSubview:bottomView];//把girlView插入到bottomView后面

 [self.view insertSubview:girlView aboveSubview:bottomView];//把girlView插入到bottomView前面

 [self.view insertSubview:girlView atIndex:0];//把girlView插入到0层

 [self.view bringSubviewToFront:girlView];//把girlView移到最前

 [self.view sendSubviewToBack:girlView];//把girlView移到最后

 

 

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

 

UIView 3D 旋转

//围绕y轴旋转PI,即镜面效果

view.layer.transform = CATransform3DConcat(view.layer.transformCATransform3DMakeRotation(M_PI,0.0,1.0,0.0));

 

一些例子:

//使view围绕view的左下角这个点旋转90度

    UIView *view = [self.view viewWithTag:100];//获取一个view

    CGAffineTransform transform = CGAffineTransformMakeRotation(-M_PI*0.5);//逆时针为负数,正则是顺时针

    

    CGRect frame = view.frame;

    view.layer.anchorPoint =CGPointMake(0,1);//设置旋转的中心点(锚点)

    view.frame = frame;//设置anchorPont会使view的frame改变。重新赋值。

    

  //一个2秒的动画,实现旋转。

    [UIView beginAnimations:nilcontext:nil];

    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

    [UIView setAnimationDuration:2.0f];

    view.transform = transform;

    [UIView commitAnimations]; 

 

 *****************

view.transform = CGAffineTransformMakeScale(0.5,0.5);//缩放50%

view.transform = CGAffineTransformIdentity;//还原

 

翻书效果:

1、

                CGRect frame = view.frame;

                view.layer.anchorPoint = CGPointMake(1.0f0.5f);

                view.frame = frame;

                [UIView beginAnimations:nilcontext:nil];

                [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

                [UIView setAnimationDuration:2.0f];

                view.layer.transform = CATransform3DMakeRotation(M_PI*0.50.01.00);

                [UIView commitAnimations];  

 

2、

                CGRect frame = view.frame;

                view.layer.anchorPoint = CGPointMake(1.0f0.5f);

                view.frame = frame;

                view.layer.position = CGPointMake(view.layer.position.x + view.bounds.size.width/2.0f, view.layer.position.y);

                CABasicAnimation *animation = [CABasicAnimationanimationWithKeyPath:@"transform"];

                animation.duration = 2.0f;

                animation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];

                CATransform3D tfm = CATransform3DMakeRotation(M_PI/2.0f0.0f1.0f0.0f);

                tfm.m34 = 0.001f;

                tfm.m14 = -0.0015f;

                animation.fromValue = [NSValuevalueWithCATransform3D:CATransform3DIdentity];

                animation.toValue = [NSValue valueWithCATransform3D:tfm];

                [view.layer addAnimation:animation forKey:@"flipUp"];

两种效果一样。

 

 

动画的各种几何特性,大都可以通过此方法设定:

  1. [myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];  
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];

                   

 

  从官方的API上的解释,可以看出 hitTest方法中,要先调用PointInside:withEvent:,看是否要遍历子视图。如果我们不想让某个视图响应事件,只需要重载PointInside:withEvent:方法,让此方法返回NO就行了。

分享到:
评论

相关推荐

    UIView的生命周期

    7. `viewDidDisappear`方法在视图被隐藏后调用,开发者可以在这里执行一些后续的清理工作,比如处理用户交互相关的逻辑,以及结束一些需要在视图显示期间执行的任务。 8. `didReceiveMemoryWarning`方法在应用程序...

    UIView相关示例代码

    在iOS开发中,UIView是构建用户...以上就是“UIView相关示例代码”所涵盖的知识点,通过学习和实践这些内容,开发者能够更好地理解和掌握iOS应用的界面设计和交互实现。这个示例代码是理解并掌握这些基础概念的好起点。

    Swift自定义UIView动画

    首先,`UIView`动画是通过`UIView`类提供的动画方法来实现的,这些方法允许我们以平滑、流畅的方式改变视图的属性,如位置、大小、透明度等。例如,我们可以使用`animate(withDuration:animations:)`方法来执行一个...

    UIView+Utils

    总结来说,`UIView+Utils`是对`UIView`类的扩展,提供了获取和操作视图尺寸的便利方法,以及与布局、动画相关的辅助功能,大大提升了iOS开发的效率。在使用时,开发者只需引入相应的库,就可以轻松调用这些方法,...

    UIView的介绍,OC版的

    **正文** `UIView`是iOS应用开发中的核心组件,它在Objective-C(OC)中扮演着重要的角色。本文将深入探讨`UIView`的基本概念...通过下载提供的资料,你可以深入学习`UIView`的相关知识,进一步提升你的iOS开发技能。

    UIView转化为ImageDemo

    然后,通过调用UIView的`drawViewHierarchyInRect:afterScreenUpdates:`方法,将整个视图层次结构绘制到这个图形上下文。这一步会捕获视图及其子视图的所有内容。 2. **从图形上下文获取UIImage**: 绘制完成后,...

    swift-轻量级组件能够让所有UIView都支持进度条展示

    在Swift中,我们可以创建一个名为`Progressable`的协议,定义进度条的相关属性和方法。比如,我们可以定义`progress`属性来存储当前的进度值,以及`setProgress(_:animated:)`方法来更新进度,并提供动画效果。这样...

    通过协议扩展高斯模糊任意 UIView.zip

    `Blurable`协议可能包含一个或多个相关的方法或属性,用于描述视图如何应用高斯模糊。例如,可以有一个`blur()`方法,该方法负责实现模糊效果。 2. **协议扩展实现**: 在协议扩展中,开发者会实现`blur()`方法的...

    swift-Twinkle-✨一个Swift和简单的方法能让任何UIView产生闪烁效果

    标题中的"swift-Twinkle-✨一个Swift和简单的方法能让任何UIView产生闪烁效果"指出了这个库的核心功能:用Swift编写,提供一种简洁的方式,使任何UIView对象都能实现闪烁效果。这使得开发者无需深入学习复杂的动画...

    UIView数据交互demo

    例如,`UIViewController`可以有一个方法`updateUserInfo(UserInfoModel userInfo)`,这个方法接收用户数据模型,并将其设置到`UserInfoView`的相关属性上,如`usernameLabel.text = userInfo.username`。...

    ios-UIView分类,可直接修改frame的值.zip

    在这个例子中,我们添加了一个名为`UIView+Extension`的分类,对`UIView`进行扩展,添加了一些便捷的方法来直接设置`frame`的相关属性。 通常,`UIView`的`frame`属性是一个`CGRect`结构体,包含`origin`和`size`两...

    使用NIB父类来创建UIVIEW

    4. **连接IBOutlet和IBAction**:在Interface Builder中,我们可以将NIB文件中的UI元素与`UIView`子类的属性(IBOutlet)和方法(IBAction)连接起来,以便在代码中直接操作这些元素。 5. **使用NIB父类**:现在...

    iPhone开发UIView

    下面,我们将详细讨论与`UIView`相关的知识点。 1. **UIView基本概念**:`UIView`是所有UI元素的基类,包括按钮、文本框、标签等。它负责在屏幕上绘制内容,管理子视图的布局,并处理触控事件。 2. **视图层次**:...

    iOS UIView类 UIViewExt工具

    `UIViewExt` 工具类是对 `UIView` 的扩展,它旨在简化开发者在处理 UI 控件时的一些常见任务,例如获取控件的位置、大小等相关属性。 `UIViewExt` 类通常包含一系列静态方法或扩展的方法,这些方法使得开发者能够更...

    UIView的动画

    UIView本身,更像是一个管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。 在一个UIView对象中有以下的动画化属性: * frame:你可以使用这...

    iOS_UIView

    动画也是`UIView`的重要特性之一,通过`UIView.animate(withDuration:animations:)`方法,我们可以轻松地实现视图的各种动画效果,如平移、旋转、缩放等。 总之,`UIView`是iOS开发中的核心组件,理解和熟练掌握其...

    UIViewController的加载方式和UIView的加载详解

    UIView的加载流程通常与UIViewController紧密相关。一个UIViewController可以管理多个UIView,而UIView的加载时机和方式会直接影响到应用的性能和用户体验。 #### 1. loadView方法 loadView是UIViewController中的...

    IOS UIView的生命周期的实例详解

    在上面的代码中,我们可以看到LifeView类继承自UIView,并实现了相关的生命周期方法。在viewDidLoad方法中,我们实例化了LifeView对象,并将其添加到父视图中。接着,在LifeView的生命周期中,我们可以看到相关的...

    ios-UIView添加弹簧效果.zip

    在`UIView`的动画方法中,可以设置`repeatCount`参数来决定动画执行的次数,若设置为`Float.infinity`,则动画将无限循环。 在压缩包内的"AnimationView"很可能是一个自定义的UIView子类,这个子类扩展了UIView的...

Global site tag (gtag.js) - Google Analytics