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