• 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顶部和底部的距离不变。

  • 相关阅读:
    泛型
    多播委托
    匿名方法
    委托
    正则表达式
    压缩和解压,文件读取练习
    Vue样式绑定
    Vue跑马灯
    Vue中的v-for遍历循环
    Vue框架
  • 原文地址:https://www.cnblogs.com/fcug/p/6337984.html
Copyright © 2020-2023  润新知