你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS開發之UIView總結

IOS開發之UIView總結

編輯:關於IOS

如果想調用某個類的某個方法可以寫成這樣,這個方法來自NSObject類

 

C代碼  performSelector: 
performSelector:withObject: 
performSelector:withObject:withObject: 

 實際調用

 

C代碼  [self performSelector:@selector(displayViews) withObject:nil afterDelay:1.0f]; 

  有三個方法分別是

 

C代碼  //父視圖  
[self.view superview] 
//所有子視圖 
 [self.view subviews] 
//自身的window 
 self.view.window 

循環一個視圖下面所有視圖的方法

 

C代碼  NSArray *allSubviews(UIView *aView) 

    NSArray *results = [aView subviews]; 
    for (UIView *eachView in [aView subviews]) 
    { 
        NSArray *riz = allSubviews(eachView); 
        if (riz) { 
            results = [results arrayByAddingObjectsFromArray:riz]; 
        } 
    } 
    return results; 

循環返回一個APPLICATION裡面所有的VIEW

 

C代碼  // Return all views throughout the application 
NSArray *allApplicationViews() 

    NSArray *results = [[UIApplication sharedApplication] windows]; 
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) 
    { 
        NSArray *riz = allSubviews(window); 
        if (riz) results = [results arrayByAddingObjectsFromArray: riz]; 
    } 
    return results; 

 
 找出所有的父視圖

 

C代碼  // Return an array of parent views from the window down to the view 
NSArray *pathToView(UIView *aView) 

    NSMutableArray *array = [NSMutableArray arrayWithObject:aView]; 
    UIView *view = aView; 
    UIWindow *window = aView.window; 
    while (view != window) 
    { 
        view = [view superview]; 
        [array insertObject:view atIndex:0]; 
    } 
    return array; 

UIView提供了大量管理視圖的方法

 

C代碼  //加一個視圖到一個視圖裡面 
addSubview: 
//將一個視圖移到前面 
bringSubviewToFront: 
//將一個視圖推送到背後 
sendSubviewToBack: 
//把視圖移除 
removeFromSuperview 
//插入視圖 並指定索引 
insertSubview:atIndex: 
//插入視圖在某個視圖之上 
insertSubview:aboveSubview: 
//插入視圖在某個視圖之下 
insertSubview:belowSubview: 
//交換兩個位置索引的視圖 
exchangeSubviewAtIndex:withSubviewAtIndex: 

視圖回調

 

C代碼  //當加入視圖完成後調用 
(void)didAddSubview:(UIView *)subview 
//當視圖移動完成後調用 
(void)didMoveToSuperview 
//當視圖移動到新的WINDOW後調用 
(void)didMoveToWindow 
//在刪除視圖之後調用 
(void)willRemoveSubview:(UIView *)subview 
//當移動視圖之前調用 
(void)didMoveToSuperview:(UIView *)subview 
//當視圖移動到WINDOW之前調用 
(void)didMoveToWindow 

 給UIView設置標記和檢索視圖

 

C代碼  myview.tag = 1001; 
[self.view viewWithTag:1001]; 
(UILable *)[self.view.window viewWithTag:1001]; 

視圖的幾何特征

 

C代碼  //框架 
struct CGPoint { 
  CGFloat x; 
  CGFloat y; 
}; 
typedef struct CGPoint CGPoint; 
 
/* Sizes. */ 
 
struct CGSize { 
  CGFloat width; 
  CGFloat height; 
}; 
typedef struct CGSize CGSize; 
 
struct CGRect { 
  CGPoint origin; 
  CGSize size; 
}; 
typedef struct CGRect CGRect; 
 
 
 
CGRect rect = CGRectMake(0,0,320,480); 
UIView *view = [[UIView allow]initWithFrame:rect]; 
 
//將String轉成CGPoint 如 @”{3.0,2.5}”    {x,y} 
CGPoint CGPointFromString ( 
   NSString *string 
); 
 
//將String轉成CGRect  @”{{3,2},{4,5}}”  {{x,y},{w, h}} 
CGRect CGRectFromString ( 
   NSString *string 
); 
 
//將String轉成CGSize @”{3.0,2.5}” {w, h} 
CGSize CGSizeFromString ( 
   NSString *string 
); 
 
//CGPoint轉成NSString 
NSString * NSStringFromCGPoint ( 
   CGPoint point 
); 
 
//CGRect轉成NSString 
NSString * NSStringFromCGRect ( 
   CGRect rect 
); 
 
//CGSize轉成NSString 
NSString * NSStringFromCGSize ( 
   CGSize size 
); 
 
//對一個CGRect進行修改 以這個的中心來修改 正數表示更小(縮小) 負數表示更大(放大) 
CGRect CGRectInset ( 
   CGRect rect, 
   CGFloat dx, 
   CGFloat dy 
); 
 
//判斷兩個矩形是否相交 
bool CGRectIntersectsRect ( 
   CGRect rect1, 
   CGRect rect2 
); 
 
//初始為0的 
const CGPoint CGPointZero; 
const CGRect CGRectZero; 
const CGSize CGSizeZero; 
 
//創建CGPoint 
CGPoint CGPointMake ( 
   CGFloat x, 
   CGFloat y 
); 
//創建CGRect 
CGRect CGRectMake ( 
   CGFloat x, 
   CGFloat y, 
   CGFloat width, 
   CGFloat height 
); 
//創建CGSize 
CGSize CGSizeMake ( 
   CGFloat width, 
   CGFloat height 
); 

仿射變換

 

C代碼  CGAffineTransform form = CGAffineTransformMakeRotation(PI); 
myview.transform = form; 

如想復原

 

C代碼  myview.transform = CGAffineTransformIdentity; 

 直接設置視圖的中心

 

C代碼  myview.center = CGPointMake(100,200); 

 中心

 

C代碼  CGRectGetMinX 
CGRectGetMinY 
//X的中間值 
CGRectGetMidX 
//Y的中間值 
CGRectGetMidY 
CGRectGetMaxX 
CGRectGetMaxY 

  定時器

 

C代碼  NSTime *timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(move:) userInfo:nil repeats:YES]; 

  定義視圖邊界

C代碼  typedef struct UIEdgeInsets { 
    CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset' 
} UIEdgeInsets; 
//eg 
UIEdgeInsets insets = UIEdgeInsetsMake(5, 5, 5, 5); 
CGRect innerRect = UIEdgeInsetsInsetRect([aView bounds], insets); 
CGRect subRect = CGRectInset(innerRect, self.frame.size.width / 2.0f, self.frame.size.height / 2.0f); 

仿射變換補充

//創建CGAffineTransform

C代碼  //angle 在0-2*PI之間比較好  旋轉 
CGAffineTransform transform = CGAffineTransformMakeRotation(angle); 
//縮放  
CGAffineTransform transform = CGAffineTransformMakeScale(0.5f,0.5f); 
//改變位置的 
CGAffineTransform transform = CGAffineTransformMakeTranslation(50,60); 
 
//修改CGAffineTransform 
//修改 縮放  
CGAffineTransform scaled = CGAffineTransformScale(transform, degree, degree); 
//修改 位置 
CGAffineTransform transform = CGAffineTransformTranslate( 
   CGAffineTransform t, 
   CGFloat tx, 
   CGFloat ty 
); 
 
//修改角度  
CGAffineTransform transform = CGAffineTransformRotate ( 
   CGAffineTransform t, 
   CGFloat angle 
); 
//最後設置到VIEW 
 [self.view setTransform:scaled]; 
 
建立UIView動畫塊

   //首先建立CGContextRef

C代碼  CGContextRef context = UIGraphicsGetCurrentContext(); 
//標記動畫開始 
[UIView beginAnimations:nil context:context]; 
//定義動畫加速或減速的方式 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
//定義動畫的時長 1秒 
[UIView setAnimationDuration:1.0]; 
//中間處理 位置變化,大小變化,旋轉,等等的 
[[self.view viewWithTag:999] setAlpha:1.0f]; 
//標志動畫塊結束 
[UIView commitAnimations]; 
//還可以設置回調 
[UIView setAnimationDelegate:self]; 
//設置回調調用的方法 
[UIView setAnimationDidStopSelector:@selector(animationFinished:)]; 

  視圖翻轉

 

C代碼  UIView *whiteBackdrop = [self.view viewWithTag:100]; 
// Choose left or right flip 選擇左或右翻轉 
if ([(UISegmentedControl *)self.navigationItem.titleView selectedSegmentIndex]){ 
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:whiteBackdrop cache:YES]; 
}else{ 
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:whiteBackdrop cache:YES]; 

    NSInteger purple = [[whiteBackdrop subviews] indexOfObject:[whiteBackdrop viewWithTag:999]]; 
    NSInteger maroon = [[whiteBackdrop subviews] indexOfObject:[whiteBackdrop viewWithTag:998]]; 
//交換視圖 
    [whiteBackdrop exchangeSubviewAtIndex:purple withSubviewAtIndex:maroon]; 
 
//還有上翻和下翻兩種 如下 
typedef enum { 
//沒有任何效果 
    UIViewAnimationTransitionNone, 
    UIViewAnimationTransitionFlipFromLeft, 
    UIViewAnimationTransitionFlipFromRight, 
    UIViewAnimationTransitionCurlUp, 
    UIViewAnimationTransitionCurlDown, 
} UIViewAnimationTransition; 

  使用QuartzCore做動畫

 

C代碼  //創建CATransition 
CATransition *animation = [CATransition animation]; 
//設置代理 
animation.delegate = self; 
//設置動畫過渡的時間 
animation.duration = 4.0f; 
//定義動畫加速或減速的方式  
animation.timingFunction = UIViewAnimationCurveEaseInOut; 
//animation.type 表示設置過渡的種類 如 Fade,MoveIn,Push,Reveal 
switch ([(UISegmentedControl *)self.navigationItem.titleView selectedSegmentIndex]) { 
        case 0: 
            animation.type = kCATransitionFade; 
            break; 
        case 1: 
            animation.type = kCATransitionMoveIn; 
            break; 
        case 2: 
            animation.type = kCATransitionPush; 
            break; 
        case 3: 
            animation.type = kCATransitionReveal; 
        default: 
            break; 
    } 
//設置漸變的方向,上下左右 
    if (isLeft) 
        animation.subtype = kCATransitionFromRight; 
    else 
        animation.subtype = kCATransitionFromLeft; 
 
// Perform the animation 
    UIView *whitebg = [self.view viewWithTag:10]; 
    NSInteger purple = [[whitebg subviews] indexOfObject:[whitebg viewWithTag:99]]; 
    NSInteger white = [[whitebg subviews] indexOfObject:[whitebg viewWithTag:100]]; 
    [whitebg exchangeSubviewAtIndex:purple withSubviewAtIndex:white]; 
    [[whitebg layer] addAnimation:animation forKey:@"animation"]; 
 
animation.type還可以用以下的賦值

 

C代碼  switch (theButton.tag) {   
        case 0:   
            animation.type = @"cube";   
            break;   
        case 1:   
            animation.type = @"suckEffect";   
            break;   
        case 2:   
            animation.type = @"oglFlip";   
            break;   
        case 3:   
            animation.type = @"rippleEffect";   
            break;   
        case 4:   
            animation.type = @"pageCurl";   
            break;   
        case 5:   
            animation.type = @"pageUnCurl";   
            break;   
        case 6:   
            animation.type = @"cameraIrisHollowOpen ";   
            break;   
        case 7:   
            animation.type = @"cameraIrisHollowClose ";   
            break;   
        default:   
            break;   
    }   

 

休眠一下

 

C代碼  [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0f]]; 
 
一個簡單的通過圖片做的動畫

 

C代碼  // Load butterfly images 
NSMutableArray *bflies = [NSMutableArray array]; 
for (int i = 1; i <= 17; i++){ 
    [bflies addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"bf_%d", i] ofType:@"png"]]]; 

UIImageView *butterflyView = [[UIImageView alloc] initWithFrame:CGRectMake(40.0f, 300.0f, 60.0f, 60.0f)]; 
butterflyView.tag = 300; 
       //設置動畫的圖片 
butterflyView.animationImages = bflies; 
       //設置時間 
butterflyView.animationDuration = 0.75f; 
[self.view addSubview:butterflyView]; 
       //開始動畫 
[butterflyView startAnimating]; 
[butterflyView release]; 
 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved