iphone開發我的新浪微部落格戶端-使用者登入自訂快顯視窗篇(1.2)

來源:互聯網
上載者:User

本篇的目的是開發一個自訂的彈出交談視窗組件,就是上面圖6中半透明的資訊提示視窗,其實系統類別庫中已經有UIActionSheet、UIAlertView能做到這樣的功能組件,但是顯示外觀不怎麼美觀而且跟我的這個設計不怎麼配,同時這2個組件的外觀自訂性很差幾乎改變不了顯示外觀,所以決定自己開發一個組件。實現的思路是這樣的,做一個繼承自UIWindow組件的組件的對象,這樣這個組件也就是一個UIWindow瞭然後在這個UIWindow中添加相應的半透明View達到顯示效果的目的,當我們需要顯示快顯視窗只需要把這個UIWindow設定為主顯示視窗即可,比如執行代碼:[self makeKeyAndVisible]。實現的思路很簡單了,現在開始具體動手。

      一、用Xcode開啟上一篇完成的工程然後建立名為UIDialogWindow的Objective-C class類型的檔案,這個UIDialogWindow裡有3個從上到下的UIView組件和1個UIImageView構成,分別是作為根View的superView,作為遮罩view的backgroundView,作為半透明的圓角背景圖view的backgroundImage,作為視窗顯示內容view的view,關於這個內容view有點特別,這個由使用這個UIDialogWindow時候才進行提供,因為每個地方使用彈窗呈現的內容肯定是大不相同了,只有這樣才能提高組件的靈活性。

      二、開啟UIDialogWindow.h檔案,具體代碼如下,在這個檔案中定義了上面提到的4個view,並且一個初始化方法,一個顯示視窗方法,一個關閉顯示視窗方法這些方法基本上能完成一個快顯視窗的功能任務了。

#import <Foundation/Foundation.h>

#import <QuartzCore/QuartzCore.h>

#import "Global.h"

@interface UIDialogWindow : UIWindow {   

 UIView *view;    UIView *superView;   

UIView *backgroundView;   

UIImageView *backgroundImage;   

BOOL isClose;

}

@property (nonatomic,retain)UIView *view;@property (nonatomic,retain)UIView *superView;@property (nonatomic,retain)UIView *backgroundView;

@property (nonatomic,retain)UIImageView *backgroundImage;

-(UIDialogWindow *)initWithView:(UIView *)aView;

-(void)show;-(void)close;

@end     

二、開啟UIDialogWindow.m檔案,首先我們來完成初始化方法的編寫,初始化方法就是把上面提到的4個view按照一定的順序添加到window中,具體代碼如下,在這裡需要注意的是這個快顯視窗的顯示大小右內容view的尺寸決定,在初始化方法中會先擷取內容view的尺寸,然後根據這個尺寸調整其他3個view的尺寸。

-(UIDialogWindow *)initWithView:(UIView *)aView

{   

 if (self=[super init])

{               

//內容view       

self.view=aView;               

 [self setFrame:[[UIScreen mainScreen]bounds]];        self.windowLevel=UIWindowLevelStatusBar;       

self.backgroundColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:0.1];                       

//根view       

UIView *sv=[[UIView alloc] initWithFrame:[self bounds]];       

self.superView=sv;       

[superView setAlpha:0.0f];       

[self addSubview:superView];       

 [sv release];               

CGFloat d=-7.0f;       

UIView *bv=[[UIView alloc] initWithFrame:CGRectInset(CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height),d,d)];        self.backgroundView=bv;                       

 //圓角圖片背景view       

 UIImageView *bi=[[UIImageView alloc] initWithImage:[[Global pngWithPath:@"dialog_bg2"]stretchableImageWithLeftCapWidth:13.0 topCapHeight:9.0]];       

 self.backgroundImage=bi;       

 [backgroundImage setFrame:[backgroundView bounds]];       

[backgroundView insertSubview:backgroundImage atIndex:0];       

 [backgroundView setCenter:CGPointMake(superView.bounds.size.width/2, superView.bounds.size.height/2)];       

[superView addSubview:backgroundView];               

 CGRect frame=CGRectInset([backgroundView bounds], -1*d, -1*d);               

 //顯示內容view       

 [backgroundView addSubview:self.view];       

[self.view setFrame:frame];       

 isClose=NO;       

[bv release];       

[bi release];   

 }   

return self;}     

 三、當初始化方法把這些view添加到window時同時設定了根view的為透明([superView setAlpha:0.0f]),這樣我們還是看不到顯示的這個快顯視窗了因為透明了,這個時候我們在編寫一個顯示快顯視窗的方法,這個代碼的實現非常的簡單了,其實還可以考慮加入一定的動畫效果,使得顯示的過程更加的具有彈出的動態過程效果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.