iOS开发-UI (七)view层次动画 和 ImageView

知识点:

1.UIView的简单动画

2.UIView层次关系

3.UIImageView的使用

4.简单的手势操作

5.UIView 停靠模式

 

=====================

UIView的简单动画

 

   1.UIView坐标系统

     1)UIView相对于父视图的坐标系统

 

   2.UIView的frame,center,bounds关系

     frame:  该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)

     bounds: 该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统)

     center: 该view的中心点在父view坐标系统中的位置。(参照点是,父亲的坐标系统)

 

   3.设置透明度

    @property(nonatomic)  CGFloat   alpha 

  view1.alpha = 0.2;

   4.UIView中的简单动画效果1

     1.开始动画

       +(void)beginAnimations:(NSString *)animationID context:(void *)context;

     2.持续时间

       +(void)setAnimationDuration:(CFTimeInterval)dur;

     3.提交动画(运行动画)

       +(void)commitAnimations;

 

//开启动画

    [UIView beginAnimations:nil context:nil];

    //设置动画持续时间

    [UIView setAnimationDuration:5.0];

  //提交动画

[UIView commitAnimations];

 

  5. UIView中的简单动画效果2

+ (void)animateWithDuration:(NSTimeInterval)duration 

animations:(void (^)(void))animations 

completion:(void (^)(BOOL finished))completion 

                    

//开始动画

    [UIView animateWithDuration:2.0 animations:^{

        //提交的动画内容

        //改变view1的位置

        view1.center = CGPointMake(CGRectGetWidth(self.window.frame) - 50, CGRectGetHeight(self.window.frame) - 50);
        
        //改变绿色

        view1.backgroundColor = [UIColor greenColor];

    } completion:^(BOOL finished) {

        //上述动画执行完毕之后,会回调此block当中的代码块
       //开启动画

        [UIView animateWithDuration:2.0 animations:^{

            //恢复原位

            view1.center = CGPointMake(50, 70);

            view1.backgroundColor = [UIColor orangeColor];

        }];

    }];

 

=====================

UIView层次关系

 

   1.如何在UIView上叠加新的UIView

     - (void)addSubview:(UIView *)view;

[self.window addSubview:view1];

 

   2.如何获取UIView的父视图

     @property(nonatomic,readonly) UIView  *superview;

//从一个子视图当中获取它的父视图对象

    NSLog(@"sView3.superview = %p fView = %p",sView3.superview,fView);

 

   3.如何获取UIView子视图

     @property(nonatomic,readonly,copy) NSArray *subviews; //从父视图当中获取到它之上的所有子视图

    for (UIView *tempView in fView.subviews)

 

   4.把一个子视图移动到最前端

- (void)bringSubviewToFront:(UIView *)view;

//移动某个子视图到最前端

    [fView bringSubviewToFront:sView1];

    //移动某个子视图到最后端

    [fView sendSubviewToBack:sView2];

 

   5.交换子视图的图层

- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;

//交换连个视图的图层

    [fView exchangeSubviewAtIndex:0 withSubviewAtIndex:2];

 

   6.如何在特定位置插入一个视图

     - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;

//插入视图

    [fView insertSubview:sView4 atIndex:1];

   7.如何删除一个视图(该函数是给要删除的视图发送)

     - (void)removeFromSuperview;

ps:removeFromSuperview:将一个视图从父视图当中移除,同时会移除该视图上的所有子视图

//一次性删除这个视图上的所有子视图

        [tempView removeFromSuperview];

 

   8.如何剪切一个视图超出父视图之外的部分

     @property(nonatomic)  BOOL   clipsToBounds; 

//剪裁超出父视图的部分

    fView.clipsToBounds = YES;

 

   9.如何隐藏和显示一个UIView

     @property(nonatomic,getter=isHidden) BOOL  hidden;

//隐藏一个视图

    sView1.hidden = YES;

   10.检测视图之间的关系

     - (BOOL)isDescendantOfView:(UIView *)view;

 

//检测一个视图是否为另外一个视图的子视图

    if ([sView2 isDescendantOfView:fView]) {

        

        NSLog(@"sView2是fView的子视图");

        

    }

=====================

UIImageView使用

   

1.如何重新设置图片内容

  @property(nonatomic,retain) UIImage *image

2.如何解决图片内容变形问题(该属性由UIView继承)

  @property(nonatomic) UIViewContentMode contentMode

UIViewContentModeScaleToFill             拉伸内容,会导致内容变形

UIViewContentModeScaleAspectFit    拉伸内容,内容比例不变

UIViewContentModeScaleAspectFill    拉伸内容,内容比例不变,但是有可能部分内容不能显示

imageView.contentMode = UIViewContentModeScaleAspectFill;

 

=====================

简单的手势操作

 

   UITapGestureRecognizer             点击

   UIPinchGestureRecognizer              二指往內或往外拨动,平时经常用到的缩放

   UIRotationGestureRecognizer        旋转

   UISwipeGestureRecognizer           滑动,快速移动

   UIPanGestureRecognizer                 拖移,慢速移动

   UILongPressGestureRecognizer      长按

 

/*

     参数1:目标对象

     参数2:回调的方法

     */

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTap:)];

//双击触发

    tap.numberOfTapsRequired = 2;

    

    //添加手势到Window之上

    [self.window addGestureRecognizer:tap];

 

//快速滑动

    UISwipeGestureRecognizer *swi = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(myTap:)];

    /*

     typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {

     UISwipeGestureRecognizerDirectionRight = 1 << 0,

     UISwipeGestureRecognizerDirectionLeft  = 1 << 1,

     UISwipeGestureRecognizerDirectionUp    = 1 << 2,

     UISwipeGestureRecognizerDirectionDown  = 1 << 3

     };

     */

    //设置支持的方向

    //水平和竖直方向能支持其中一种

    swi.direction =  UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;

    

    [self.window addGestureRecognizer:swi];

 

//长按手势

    //长按之后,滑动也会触发,放手也会触发一次

    UILongPressGestureRecognizer *longGes = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:  @selector(myTap:)];

    //触发事件需要的最短时间

    longGes.minimumPressDuration = 1;

    [self.window addGestureRecognizer:longGes];

    

    //关闭人机交互开关

    //self.window.userInteractionEnabled = NO;

    

    /*

     注意事项:

     1.每一个UIView都有一个属性userInteractionEnabled,如果这个属性值为NO,则无法触发事件(包括手势和btn的点击事件)

     2.UILabel,UIImageView在实例化出来的时候,默认userInteractionEnabled的值为NO

     3.如果父视图的userInteractionEnabled的值为NO,则子视图也不可以响应事件

     4.如果视图被隐藏,也不可以响应事件

     

     */

ps:当视图hidden属性设置为YES的时候,或者userInteractionEnabled=NO

的时候,就无法进行人机交互

 

 

=====================

UIView 停靠模式

 

   1.自动布局:当父视图变化时子视图如何变化

1)先设置父视图的autoresize属性为YES

2)再设置子视图的mask属性

//设置停靠模式

    //父视图设置autoresizesSubviews

    fView2.autoresizesSubviews = YES;

    //子视图设置停靠的模式

    //UIViewAutoresizingFlexibleLeftMargin 子视图到父视图的右边距距离固定

    //UIViewAutoresizingFlexibleWidth 宽度是可变的

    sView2.autoresizingMask = UIViewAutoresizingFlexibleWidth;

 

    @property(nonatomic) BOOL autoresizesSubviews;

 

    @property(nonatomic) UIViewAutoresizing autoresizingMask;

UIViewAutoresizingNone

就是不自动调整。

UIViewAutoresizingFlexibleLeftMargin 

自动调整与superView左边的距离,保证与superView右边的距离不变 UIViewAutoresizingFlexibleRightMargin

自动调整与superView的右边距离,保证与superView左边的距离不变。 UIViewAutoresizingFlexibleTopMargin 

自动调整与superView顶部的距离,保证与superView底部的距离不变。 UIViewAutoresizingFlexibleBottomMargin 

自动调整与superView底部的距离,保证与superView顶部的距离不变。 UIViewAutoresizingFlexibleWidth

自动调整自己的宽度,保证与superView左边和右边的距离不变。 UIViewAutoresizingFlexibleHeight

自动调整自己的高度,保证与superView顶部和底部的距离不变。

 

posted @ 2017-01-21 22:13  CUG  阅读(1077)  评论(0编辑  收藏  举报