iOS開發-UI (七)view層次動畫 和 ImageView,-uiimageview
知識點:
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頂部和底部的距離不變。