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

来源:互联网 时间:2017-01-22

知识点:

1.UIView的简单动画

2.UIView层次关系

3.UIImageView的使用

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

 

相关阅读:
Top