• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            面對現實,超越自己
            逆水行舟,不進則退
            posts - 269,comments - 32,trackbacks - 0
            創建兩種方法:
            (1)常規的initWithFrame的方式 
            UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(100, 50, 100, 75)];

            [btn1 setTitle:@"close" forState:UIControlStateNormal];
            btn1.backgroundColor = [UIColor greenColor];//button的背景顏色
            [btn1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];//button的背景圖片

            (2)UIButton 的一個類方法(也可以說是靜態方法)buttonWithType 
            UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            btn2.frame = CGRectMake(200, 20, 50, 60);
            btn2.backgroundColor = [UIColor blackColor];
            [btn2 setTitle:@"clicke" forState:UIControlStateNormal];
            [self.window addSubview:btn1];
            [self.window addSubview:btn2];
             
            能夠定義的button類型由6種
            typedef enum 

                UIButtonTypeCustom = 0,         // 自定義,無風格 
                UIButtonTypeRoundedRect,      // 白色圓角矩形,類似偏好設置表格單元或者地址簿卡片 
                UIButtonTypeDetailDisclosure, // 藍色的披露按鈕,可放在任何文字旁 
                UIButtonTypeInfoLight,            // 微件(widget)使用的小圓圈信息按鈕,可以放在任何文字旁 
                UIButtonTypeInfoDark,            // 白色背景下使用的深色圓圈信息按鈕 
                UIButtonTypeContactAdd,       // 藍色加號(+)按鈕,可以放在任何文字旁 
            } UIButtonType; 
             
            [btn1 setTitle:@"BTN1" forState:UIControlStateNormal];                                                                   //設置按鈕的標題
             
            [btn1 setTitle:@"高亮狀態" forState:UIControlStateHighlighted];                                                        //高亮狀態按鈕title值

            [btn2 setImage:[UIImage imageNamed:@"pic"] forState:UIControlStateNormal];                             //你也可以為按鈕的某一狀態設置為圖 

            [btn1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal];                                            //設置標題顏色 

            [btn1 setTitleShadowColor:[UIColor grayColor] forState:UIControlStateNormal ];                             //陰影 

            [btn1 setBackgroundImage:[UIImage imageNamed:@"PIC"] forState:UIControlStateHighlighted];  //背景圖像 

            btn1.titleLabel.font = [UIFont fontWithName:@“test” size:18];                                                       //設置按鈕字體大小

            [btn1 setTag:101] ;                                                                                                                            //設置tag值

            btn1.layer.cornerRadius = 4.5;                                                                                                          //設置圓角——四個圓角半徑 
            btn1.layer.borderWidth = 0.5;                                                                                                          // 按鈕邊框寬度
                               
            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();                                                   // 設置顏色空間為rgb,用于生成ColorRef
            CGColorRef borderColorRef = CGColorCreate(colorSpace,(CGFloat[]){ 0, 0, 0, 1 });                        // 新建一個紅色的ColorRef,用于設置邊框(四個數字分別是 r, g, b, alpha)
            btn1.layer.borderColor = borderColorRef;                                                                                        // 設置邊框顏色

            更多屬性參考鏈接:http://www.cocoachina.com/wiki/index.php?title=UIButton&variant=zh-cn

            參數 forState . 這個參數決定了標題、圖像或其他屬性將在何種狀態下顯現。你可以編程令按鈕在那個狀態變化 
            enum { 
                UIControlStateNormal       = 0,                    // 常態                      
                UIControlStateHighlighted  = 1 << 0,          // 高亮 
                UIControlStateDisabled     = 1 << 1,           // 禁用 
                UIControlStateSelected     = 1 << 2,           // 選中 
                UIControlStateApplication  = 0x00FF0000,  // 當應用程序標志使用時 
                UIControlStateReserved     = 0xFF000000  // 為內部框架預留的 
            }; 
            typedef NSUInteger UIControlState; 
             
            你只要掌握前四種狀態就好了。
            當按鈕高亮或者禁用,UIButton 類可以調整自己的外觀,下面幾個屬性可以讓你按照需要對按鈕的外觀進行微調:
            adjustsImageWhenHighlighted
            默認情況下,在按鈕被禁用時,圖像會被畫的顏色深一些。要禁用此功能,請將這個屬性設置為NO:
            btn1.adjustsImageWhenHighlighted = NO; 

            adjustsImageWhenDisabled
            默認情況下,按鈕在被禁用時,圖像會被畫的顏色淡一些。要禁用此功能,請將這個屬性設置為NO:
            btn1.adjustsImageWhenDisabled = NO; 

            showsTouchWhenHighlighted
            這個屬性設置為YES,可令按鈕在按下時發光。這可以用于信息按鈕或者有些重要的按鈕:
            btn1.showsTouchWhenHighlighted = YES;
             
            顯示控件
            [self.view addSubview:btn1]; 
            [self.view addSubview:btn2]; 
             
            重寫繪制行為
             
            你可以通過子類化按鈕來定制屬于你自己的按鈕類。在子類化的時候你可以重載下面這些方法,這些方法返回CGRect結構,指明了按鈕每一組成部分的邊界。
            注意:不要直接調用這些方法, 這些方法是你寫給系統調用的。
             
            backgroundRectForBounds   //指定背景邊界 
            contentRectForBounds         // 指定內容邊界 
            titleRectForContentRect       // 指定文字標題邊界  
            imageRectForContentRect   //指定按鈕圖像邊界 
             
            例:
            - (CGRect)imageRectForContentRect:(CGRect)bounds

                 return CGRectMake(0.0, 0.0, 44, 44); 

             
            [btn1 addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];//添加點擊按鈕事件
             
            -(void)btnPressed:(id)sender
            {  
                  UIButton* btn = (UIButton*)sender;  
                  //開始寫你自己的動作 
            }

            forControlEvents參數類型
             typedef NS_OPTIONS(NSUInteger, UIControlEvents) 
            {
                UIControlEventTouchDown                 = 1 <<  0,      // 單點觸摸按下事件:用戶點觸屏幕,或者又有新手指落下的時候。
                UIControlEventTouchDownRepeat      = 1 <<  1,      // 多點觸摸按下事件,點觸計數大于1:用戶按下第二、三、或第四根手指的時候。
                UIControlEventTouchDragInside         = 1 <<  2,      // 當一次觸摸在控件窗口內拖動時。
                UIControlEventTouchDragOutside       = 1 <<  3,      // 當一次觸摸在控件窗口之外拖動時。
                UIControlEventTouchDragEnter           = 1 <<  4,      // 當一次觸摸從控件窗口之外拖動到內部時
                UIControlEventTouchDragExit             = 1 <<  5,      // 當一次觸摸從控件窗口內部拖動到外部時。
                UIControlEventTouchUpInside            = 1 <<  6,      // 所有在控件之內觸摸抬起事件
                UIControlEventTouchUpOutside          = 1 <<  7,      // 所有在控件之外觸摸抬起事件(點觸必須開始與控件內部才會發送通知)。
                UIControlEventTouchCancel                = 1 <<  8,      //所有觸摸取消事件,即一次觸摸因為放上了太多手指而被取消,或者被上鎖或者電話呼叫打斷。

                UIControlEventValueChanged             = 1 << 12,     // 當控件的值發生改變時,發送通知。用于滑塊、分段控件、以及其他取值的控件。你可以配置滑塊控件何時發送通知,在滑塊被放下時發送,或者在被拖動時發送。

                UIControlEventEditingDidBegin           = 1 << 16,     // 當文本控件中開始編輯時發送通知
                UIControlEventEditingChanged           = 1 << 17,     // 當文本控件中的文本被改變時發送通知。
                UIControlEventEditingDidEnd              = 1 << 18,     // 當文本控件中編輯結束時發送通知。
                UIControlEventEditingDidEndOnExit    = 1 << 19,     // 當文本控件內通過按下回車鍵(或等價行為)結束編輯時,發送通知。

                UIControlEventAllTouchEvents             = 0x00000FFF,  // 通知所有觸摸事件。
                UIControlEventAllEditingEvents           = 0x000F0000,  // 通知所有關于文本編輯的事件。
                UIControlEventApplicationReserved    = 0x0F000000,  // range available for application use
                UIControlEventSystemReserved          = 0xF0000000,  // range reserved for internal framework use
                UIControlEventAllEvents                      = 0xFFFFFFFF   // 通知所有事件
            }; 
            posted @ 2014-07-15 13:37 王海光 閱讀(6294) | 評論 (0)編輯 收藏
            //手動定義一個UITextField 及其基本的屬性:
             UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(202013030)];
             
            //設置邊框樣式,只有設置了才會顯示邊框樣式 
            text.borderStyle = UITextBorderStyleRoundedRect;
            typedef 
            enum 
            {
                UITextBorderStyleNone, 
                UITextBorderStyleLine,
                UITextBorderStyleBezel,
                UITextBorderStyleRoundedRect  
              } UITextBorderStyle;
             
            text.backgroundColor 
            = [UIColor whiteColor];                             //設置輸入框的背景顏色,此時設置為白色 如果使用了自定義的背景圖片邊框會被忽略掉 
            text.background = [UIImage imageNamed:@"dd.png"];              //設置背景
            text.disabledBackground = [UIImage imageNamed:@"cc.png"]; //設置背景
            text.placeholder = @"password";                                                //當輸入框沒有內容時,水印提示 提示內容為password
            text.font = [UIFont fontWithName:@"Arial" size:20.0f];              //設置輸入框內容的字體樣式和大小
            text.textColor = [UIColor redColor];                                            //設置字體顏色
            text.clearButtonMode = UITextFieldViewModeAlways;                //輸入框中是否有個叉號,在什么時候顯示,用于一次性刪除輸入框中的內容

            typedef 
            enum 
            {
                UITextFieldViewModeNever,            
            //重不出現
                UITextFieldViewModeWhileEditing,    
            //編輯時出現
                UITextFieldViewModeUnlessEditing,  
            // 除了編輯外都出現
                UITextFieldViewModeAlways           
            //一直出現 
            } UITextFieldViewMode;

            text.text = @"一開始就在輸入框的文字";   //輸入框中一開始就有的文字
            text.secureTextEntry = YES;                 //每輸入一個字符就變成點 用語密碼輸入
            text.autocorrectionType = UITextAutocorrectionTypeNo;//是否糾錯
             
            typedef enum 
            {

                UITextAutocorrectionTypeDefault,  // 默認
                UITextAutocorrectionTypeNo,       //不自動糾錯
                UITextAutocorrectionTypeYes,      //自動糾錯
            } UITextAutocorrectionType;

            text.clearsOnBeginEditing = YES;                            //再次編輯就清空
            text.textAlignment = UITextAlignmentLeft;              //內容對齊方式
            text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;//內容的垂直對齊方式  UITextField繼承自UIControl,此類中有一個屬性contentVerticalAlignment
            textFied.adjustsFontSizeToFitWidth = YES;             //設置為YES時文本會自動縮小以適應文本窗口大小.默認是保持原來大小,而讓長文本滾動 
            text.minimumFontSize = 20;                                    //設置自動縮小顯示的最小字體大小
            text.keyboardType = UIKeyboardTypeNumberPad; //設置鍵盤的樣式
             
            typedef 
            enum 
            {
                UIKeyboardTypeDefault,                             默認鍵盤,支持所有字符
                UIKeyboardTypeASCIICapable,                  支持ASCII的默認鍵盤
                UIKeyboardTypeNumbersAndPunctuation, 標準電話鍵盤,支持+*#字符
                UIKeyboardTypeURL,                                    URL鍵盤,支持.com按鈕 只支持URL字符
            UIKeyboardTypeNumberPad,                          數字鍵盤
            UIKeyboardTypePhonePad,                          電話鍵盤
                UIKeyboardTypeNamePhonePad,               電話鍵盤,也支持輸入人名
            UIKeyboardTypeEmailAddress,                       用于輸入電子 郵件地址的鍵盤     
            UIKeyboardTypeDecimalPad,                          數字鍵盤 有數字和小數點
                UIKeyboardTypeTwitter,                             優化的鍵盤,方便輸入@、#字符
                
            UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, 
            } UIKeyboardType;
             
            text.autocapitalizationType 
            = UITextAutocapitalizationTypeNone;//首字母是否大寫
             
            typedef 
            enum 
            {
                UITextAutocapitalizationTypeNone,              不自動大寫
                UITextAutocapitalizationTypeWords,          單詞首字母大寫
                UITextAutocapitalizationTypeSentences,    句子的首字母大寫
                UITextAutocapitalizationTypeAllCharacters,  所有字母都大寫 
            } UITextAutocapitalizationType;

             text.returnKeyType =UIReturnKeyDone;//return鍵變成什么鍵
            typedef enum 
            {
                UIReturnKeyDefault,              默認 灰色按鈕,標有Return
                UIReturnKeyGo,                   標有Go的藍色按鈕
                UIReturnKeyGoogle,              標有Google的藍色按鈕,用語搜索
                UIReturnKeyJoin,                   標有Join的藍色按鈕
                UIReturnKeyNext,                  標有Next的藍色按鈕
                UIReturnKeyRoute,                標有Route的藍色按鈕
                UIReturnKeySearch,              標有Search的藍色按鈕
                UIReturnKeySend,                 標有Send的藍色按鈕
                UIReturnKeyYahoo,               標有Yahoo的藍色按鈕
                UIReturnKeyYahoo,               標有Yahoo的藍色按鈕
                UIReturnKeyEmergencyCall,  緊急呼叫按鈕 
            } UIReturnKeyType;

            textView.keyboardAppearance=UIKeyboardAppearanceDefault;//鍵盤外觀
            typedef enum 
            {
            UIKeyboardAppearanceDefault,   默認外觀,淺灰色
            UIKeyboardAppearanceAlert,   深灰 石墨色
            } UIReturnKeyType;

            text.delegate = self;//設置代理 用于實現協議
            [self.window addSubview:text];//把textfield加到視圖中
             
            //最右側加圖片是以下代碼  左側類似
             UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
             text.rightView
            =image;
             text.rightViewMode 
            = UITextFieldViewModeAlways; 
             
            typedef 
            enum 
            {
                UITextFieldViewModeNever,
                UITextFieldViewModeWhileEditing,
                UITextFieldViewModeUnlessEditing,
                UITextFieldViewModeAlways
            } UITextFieldViewMode;
             
            //按return鍵鍵盤往下收  becomeFirstResponder
             
            類要采用UITextFieldDelegate協議
            text.
            delegate = self; 聲明text的代理是我,我會去實現把鍵盤往下收的方法 這個方法在UITextFieldDelegate里所以我們要采用UITextFieldDelegate這個協議
             
            - (BOOL)textFieldShouldReturn:(UITextField *)textField
            {
                [text resignFirstResponder];    
            //主要是[receiver resignFirstResponder]在哪調用就能把receiver對應的鍵盤往下收
                return YES;
            }
            重寫繪制行為
            除了UITextField對象的風格選項,你還可以定制化UITextField對象,為他添加許多不同的重寫方法,來改變文本字段的顯示行為。這些方法都會返回一個CGRect結構,制定了文本字段每個部件的邊界范圍。以下方法都可以重寫。
             
            – textRectForBounds:         
            //重寫來重置文字區域
            – drawTextInRect:              //改變繪文字屬性.重寫時調用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數,就不用調用super了.
            – placeholderRectForBounds:   //重寫來重置占位符區域
            – drawPlaceholderInRect:    //重寫改變繪制占位符屬性.重寫時調用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數,就不用調用super了.
            – borderRectForBounds:      //重寫來重置邊緣區域
            – editingRectForBounds:      //重寫來重置編輯區域
            – clearButtonRectForBounds: //重寫來重置clearButton位置,改變size可能導致button的圖片失真
            – leftViewRectForBounds:
            – rightViewRectForBounds:
             
            委托方法
            - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
            {   
                  
            //返回一個BOOL值,指定是否循序文本字段開始編輯  
                  return YES; 
            } 
             
            - (void)textFieldDidBeginEditing:(UITextField *)textField
            { 
                   
            //開始編輯時觸發,文本字段將成為first responder 
            } 
             
            - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
            { 
                  
            //返回BOOL值,指定是否允許文本字段結束編輯,當編輯結束,文本字段會讓出first responder 
                
            //要想在用戶結束編輯時阻止文本字段消失,可以返回NO 
                
            //這對一些文本字段必須始終保持活躍狀態的程序很有用,比如即時消息 
              
                
            return NO; 
            } 
             
            - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
            { 
                  
            //當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調用這個方法。 
                  
            //這對于想要加入撤銷選項的應用程序特別有用 
                  
            //可以跟蹤字段內所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計用途。   
                  
            //要防止文字被改變可以返回NO 
                  
            //這個方法的參數中有一個NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中 
             
                
            return YES; 
            } 
             
            - (BOOL)textFieldShouldClear:(UITextField *)textField
            { 
                  
            //返回一個BOOL值指明是否允許根據用戶請求清除內容 
                  
            //可以設置在特定條件下才允許清除內容 
             
                
            return YES; 
            } 
             
            -(BOOL)textFieldShouldReturn:(UITextField *)textField
            { 
                  
            //返回一個BOOL值,指明是否允許在按下回車鍵時結束編輯 
                   
            //如果允許要調用resignFirstResponder 方法,這回導致結束編輯,而鍵盤會被收起[textField resignFirstResponder];
                  
            //查一下resign這個單詞的意思就明白這個方法了 
                return YES; 
            } 
             
            通知
            UITextField派生自UIControl,所以UIControl類中的通知系統在文本字段中也可以使用。除了UIControl類的標準事件,你還可以使用下列UITextField類特有的事件
             
            UITextFieldTextDidBeginEditingNotification
            UITextFieldTextDidChangeNotification
            UITextFieldTextDidEndEditingNotification
            當文本字段退出編輯模式時觸發。通知的object屬性存儲了最終文本。
             
            因為文本字段要使用鍵盤輸入文字,所以下面這些事件發生時,也會發送動作通知
            UIKeyboardWillShowNotification  
            //鍵盤顯示之前發送
            UIKeyboardDidShowNotification   //鍵盤顯示之后發送
            UIKeyboardWillHideNotification    //鍵盤隱藏之前發送
            UIKeyboardDidHideNotification    //鍵盤隱藏之后發送
            1、Text :設置文本框的默認文本。
            2、Placeholder : 可以在文本框中顯示灰色的字,用于提示用戶應該在這個文本框輸入什么內容。當這個文本框中輸入了數據時,用于提示的灰色的字將會自動消失。
            3、Background :
            4、Disabled : 若選中此項,用戶將不能更改文本框內容。
            5、接下來是三個按鈕,用來設置對齊方式。
            6、Border Style : 選擇邊界風格。
            7、Clear Button : 這是一個下拉菜單,你可以選擇清除按鈕什么時候出現,所謂清除按鈕就是出一個現在文本框右邊的小 X ,你可以有以下選擇:
                7.1 Never appears : 從不出現
                7.2 Appears while editing : 編輯時出現
                7.3 Appears unless editing : 
                7.4 Is always visible : 總是可見
            8、Clear when editing begins : 若選中此項,則當開始編輯這個文本框時,文本框中之前的內容會被清除掉。比如,你現在這個文本框 A 中輸入了 "What" ,之后去編輯文本框 B,若再回來編輯文本框 A ,則其中的 "What" 會被立即清除。
            9、Text Color : 設置文本框中文本的顏色。
            10、Font : 設置文本的字體與字號。
            11、Min Font Size : 設置文本框可以顯示的最小字體(不過我感覺沒什么用)
            12、Adjust To Fit : 指定當文本框尺寸減小時,文本框中的文本是否也要縮小。選擇它,可以使得全部文本都可見,即使文本很長。但是這個選項要跟 Min Font Size 配合使用,文本再縮小,也不會小于設定的 Min Font Size 。
            接下來的部分用于設置鍵盤如何顯示。
            13、Captitalization : 設置大寫。下拉菜單中有四個選項:
                13.1 None : 不設置大寫
                13.2 Words : 每個單詞首字母大寫,這里的單詞指的是以空格分開的字符串
                13.3 Sentances : 每個句子的第一個字母大寫,這里的句子是以句號加空格分開的字符串
                13.4 All Characters : 所以字母大寫
            14、Correction : 檢查拼寫,默認是 YES 。
            15、Keyboard : 選擇鍵盤類型,比如全數字、字母和數字等。
            16、Appearance:
            17、Return Key : 選擇返回鍵,可以選擇 Search 、 Return 、 Done 等。
            18、Auto-enable Return Key : 如選擇此項,則只有至少在文本框輸入一個字符后鍵盤的返回鍵才有效。
            19、Secure : 當你的文本框用作密碼輸入框時,可以選擇這個選項,此時,字符顯示為星號。
             
            1.Alignment Horizontal 水平對齊方式
            2.Alignment Vertical 垂直對齊方式
            3.用于返回一個BOOL值 輸入框是否 Selected(選中) Enabled(可用) Highlighted(高亮)
             
            限制只能輸入特定的字符
            (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
            {
                NSCharacterSet 
            *cs;
                cs 
            = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
             
                NSString 
            *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分離出數組,數組按@""分離出字符串
             
                BOOL canChange 
            = [string isEqualToString:filtered];
             
                
            return canChange;
            }
             
            上面那個NUMBERS是一個宏,可以在文件頂部定義:
            #define NUMBERS @”0123456789n” (這個代表可以輸入數字和換行,請注意這個n,如果不寫這個,Done按鍵將不會觸發,如果用在SearchBar中,將會不觸發Search事件,因為你自己限制不讓輸入n,好慘,我在項目中才發現的。)
            所以,如果你要限制輸入英文和數字的話,就可以把這個定義為:
            #define kAlphaNum   @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。
            當然,你還可以在以上方法return之前,做一提示的,比如提示用戶只能輸入數字之類的。如果你覺得有需要的話。
             
            限制只能輸入一定長度的字符
            - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
            { 
                  
            //string就是此時輸入的那個字符 textField就是此時正在輸入的那個輸入框 返回YES就是可以改變輸入框的值 NO相反
                  
            if ([string isEqualToString:@"n"]) //按會車可以改變
                  { 
                       
            return YES; 
                  } 
                  NSString 
            * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到輸入框的內容
             
                  
            if (self.myTextField == textField) //判斷是否時我們想要限定的那個輸入框
                  { 
                      
            if ([toBeString length] > 20
                      { 
                           
            //如果輸入框內容大于20則彈出警告
                           textField.text = [toBeString substringToIndex:20]; 
                           UIAlertView 
            *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超過最大字數不能輸入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease]; 
                           [alert show]; 
                           
            return NO; 
                      } 
                  }
             
                
            return YES; 
            }

            本文轉自:
            http://www.3lian.com/edu/2012/11-08/43227.html
            posted @ 2014-07-15 11:02 王海光 閱讀(1413) | 評論 (0)編輯 收藏
            1、根據年、月、日獲取星期幾
            - (int)getWeekdayFromDate:(int)nYead andMonth:(int)nMonth andDay:(int)nDay
            {
                NSDateComponents *_comps = [[NSDateComponents alloc] init];
                [_comps setDay:nDay];
                [_comps setMonth:nMonth];
                [_comps setYear:nYead];
                NSCalendar *gregorian = [[NSCalendar alloc]
                                         initWithCalendarIdentifier:NSGregorianCalendar];
                NSDate *_date = [gregorian dateFromComponents:_comps];
                NSDateComponents *weekdayComponents =
                [gregorian components:NSWeekdayCalendarUnit fromDate:_date];
                int _weekday = [weekdayComponents weekday];
                
                return _weekday;
            }
            - (NSUInteger)getWeekdayFromDate:(NSDate*)date
            {
                NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
                NSDateComponents* components = [[[NSDateComponents alloc] init] autorelease]; 
                NSInteger unitFlags = NSYearCalendarUnit | 
                                      NSMonthCalendarUnit | 
                                      NSDayCalendarUnit | 
                                      NSWeekdayCalendarUnit | 
                                      NSHourCalendarUnit | 
                                      NSMinuteCalendarUnit | 
                                      NSSecondCalendarUnit; 

                components = [calendar components:unitFlags fromDate:date];
                NSUInteger weekday = [components weekday]; 
                return weekday;
            }

            2、根據月和日獲取星座
            -(NSString *)getAstroWithMonth:(int)m day:(int)d
            { 
                NSString *astroString = @"魔羯水瓶雙魚白羊金牛雙子巨蟹獅子處女天秤天蝎射手魔羯";
                NSString *astroFormat = @"102123444543";
                NSString *result; 
                if (m < 1 || m > 12 || d < 1 || d > 31)
                {
                    return @"錯誤日期格式!";
                }  
                if(m == 2 && d > 29)
                {
                    return @"錯誤日期格式!!";
                }
                else if(m == 4 || m == 6 || m == 9 || m == 11)
                {
                    if (d > 30)
                    {
                        return @"錯誤日期格式!!!";
                    }
                }
                
                result = [NSString stringWithFormat:@"%@",[astroString substringWithRange:NSMakeRange(m*2 - (d < [[astroFormat substringWithRange:NSMakeRange((m - 1), 1)] intValue] - (-19))*2, 2)]];
                
                return result;
            }

            3、計算兩個日期之間相差幾天幾小時幾分鐘
            NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
               [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
               NSDate *  senddate=[NSDate date];
               //結束時間
               NSDate *endDate = [dateFormatter dateFromString:@"2014-6-24 00:00:00"];
               //當前時間
               NSDate *senderDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:senddate]];
               //得到相差秒數
               NSTimeInterval time=[endDate timeIntervalSinceDate:senderDate];
                
               int days = ((int)time)/(3600*24);
               int hours = ((int)time)%(3600*24)/3600;
               int minute = ((int)time)%(3600*24)600/60;
               
               if (days <= 0&&hours; <= 0&&minute; <= 0)
                   dateContent=@"0天0小時0分鐘";
               else
                   dateContent=[[NSString alloc] initWithFormat:@"%i天%i小時%i分鐘",days,hours,minute];

            4、獲取當前時間
            NSDate *now = [NSDate date];
            NSLog(@”now date is: %@”, now);

            NSCalendar *calendar = [NSCalendar currentCalendar];
            NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
            NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
                
            int year = [dateComponent year];
            int month = [dateComponent month];
            int day = [dateComponent day];
            int hour = [dateComponent hour];
            int minute = [dateComponent minute];
            int second = [dateComponent second];

            NSLog(@”year is: %d”, year);
            NSLog(@”month is: %d”, month);
            NSLog(@”day is: %d”, day);
            NSLog(@”hour is: %d”, hour);
            NSLog(@”minute is: %d”, minute);
            NSLog(@”second is: %d”, second);

            注:根據互聯網資料整理
            posted @ 2014-07-15 10:43 王海光 閱讀(305) | 評論 (0)編輯 收藏

            在iOS應用開發中,有三類視圖對象會打開虛擬鍵盤,進行輸入操作,但如何關閉虛擬鍵盤,卻沒有提供自動化的方法。這個需要我們自己去實現。這三類視圖對象分別是UITextField,UITextView和UISearchBar。
            這里介紹一下UITextField中關閉虛擬鍵盤的幾種方法。

             

            (原文鏈接: http://mikixiyou.iteye.com/blog/1753330 )


            第一種方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:來關閉虛擬鍵盤。
            在UITextField視圖對象如birdNameInput所在的類中實現這個方法。

            - (BOOL)textFieldShouldReturn:(UITextField *)textField {  
                if ((textField == self.birdNameInput) || (textField == self.locationInput)) {  
                    [textField resignFirstResponder];  
                }  
                return YES;  

             這樣,在輸入框birdNameInput中打開虛擬鍵盤后,輕擊鍵盤的return鍵就會自動關閉掉虛擬鍵盤。


            第二種方法,將birdNameInput的屬性中Return Key修改為done,再定義一個方法和Done鍵的Did End On Exit連接。通過輕擊done鍵觸發這個事件來關閉虛擬鍵盤。
            定義的方法如下:

            - (IBAction) textFieldDoneEditing:(id)sender  
            {  
                    [sender resignFirstResponder];  
             

            這兩個方法都是輕擊虛擬鍵盤上一個鍵來關閉它。這屬于精確操作,而手指不像鼠標,做這種操作不容易。因此就UI層面而言,這兩個方法都不是最好的方法。
            在iphone或ipad屏幕上,虛擬鍵盤占用的面積大小是有限的。通過輕擊虛擬鍵盤之外的區域而關閉虛擬鍵盤。

             

            第三種方法,通過輕擊鍵盤之外的空白區域關閉虛擬鍵盤。
            在birdNameInput所屬的視圖控制器類的viewDidLoad方法中定義一個UITapGestureRecognizer的對象,然后將它賦值為它的視圖。

            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]   initWithTarget:self action:@selector(dismissKeyboard)];  
            [self.view addGestureRecognizer:tap];  
            [tap release]; 


            再定義一下選擇器調用的方法dismissKeyboard。

            -(void)dismissKeyboard {  
                   [birdNameInput resignFirstResponder];  


            如果屏幕上有多個textField的話,一個一個地列出來就有些麻煩。那么將方法修改一下,如下:

            -(void)dismissKeyboard {  
                NSArray *subviews = [self.view subviews];  
                for (id objInput in subviews) {  
                    if ([objInput isKindOfClass:[UITextField class]]) {  
                        UITextField *theTextField = objInput;  
                        if ([objInput isFirstResponder]) {  
                            [theTextField resignFirstResponder];  
                        }  
                    }  
                }  
            }

            如果這個屏幕上的視圖對象很復雜的話,另當別論。
            這個方法是編碼新建一個手勢對象。也可以直接使用interface builder圖形化開發工具,在storyboard中拉入一個手勢對象到視圖控制器類中,再將此手勢對象建立一個IBACTION,名稱可以是dismissKeyboard。

            第四種方法,通過輕擊鍵盤之外的空白區域關閉虛擬鍵盤。
            將屏幕上的view也就是textField的父視圖拖一個touch down事件出來,和一個能關閉虛擬鍵盤的方法連接。如果視圖沒有touch down事件,可將view的父類從UIView修改為UIButton。
            首先定義并實現一個方法backgroundTap:。

             - (IBAction) backgroundTap:(id)sender  
            {  
                    NSArray *subviews = [self.view subviews];  
                for (id objInput in subviews) {  
                    if ([objInput isKindOfClass:[UITextField class]]) {  
                        UITextField *theTextField = objInput;  
                        if ([objInput isFirstResponder]) {  
                            [theTextField resignFirstResponder];  
                        }  
                    }  
                }  
            }

            然后選擇背景視圖的Touch Down事件,連接 backgroundTap:即可。這樣只要輕擊一下虛擬鍵盤之外的區域,就能關閉虛擬鍵盤。這些方法都是使用resignFirstResponder方法來關閉虛擬鍵盤,還有其他的方法。

             

            第五種方法,使用endEditing:方法
            在所在的視圖控制器類中,覆蓋這個方法。

            - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
                  [[self view] endEditing:YES];  
            }

             

            This method looks at the current view and its subview hierarchy for the text field that is currently the first responder. If it finds one, it asks that text field to resign as first responder. If the force parameter is set to YES, the text field is never even asked; it is forced to resign.
            但是,如果這個屏幕很復雜,虛擬鍵盤之外的區域中有很多按鈕。輕擊這些區域時可能會輕擊到這些按鈕,這樣虛擬鍵盤就不能關閉。
            要是找到一個沒有按鈕的空白區域都不容易且還有隱藏的視圖對象時,通過輕擊虛擬鍵盤之外的區域關閉虛擬鍵盤的方法實現起來就難了。

             

            第六種方法,覆蓋hitTest:withEvent:方法關閉虛擬鍵盤

             

            在stackoverflow.com上,有人這樣總結。說使用hitTest:withEvent:方法是最好的,也是最容易的解決方法。

             

            I think the easiest (and best) way to do this is to subclass your global view and use hitTest:withEvent method to listen to any touch. 
            Touches on keyboard aren't registered, so hitTest:withEvent is only called when you touch/scroll/swipe/pinch... somewhere else, then call [self endEditing:YES].
            This is better than using touchesBegan because touchesBegan are not called if you click on a button on top of the view. 
            It is better than UITapGestureRecognizer which can't recognize a scrolling gesture for example. It is also better than using a dim screen because in a complexe and dynamic user interface, you can't put dim screen every where. Moreover, it doesn't block other actions, you don't need to tap twice to select a button outside (like in the case of a UIPopover).
            Also, it's better than calling [textField resignFirstResponder], because you may have many text fields on screen, so this works for all of them.

             

            因此,我再建立一個繼承UIView的視圖類。在這個視圖類中,覆蓋hitTest:withEvent:方法,增加[self endEditing:YES]方法。

             - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {  
            UIView *result = [super hitTest:point withEvent:event];  
            [self endEditing:YES]  
            return result;  

            我將視圖控制器的主視圖所屬類修改為這個新建視圖類。這樣在屏幕上輕擊任何位置都會關閉虛擬鍵盤。
            這個方法是最簡單,也是最好的關閉虛擬鍵盤的方法。
            使用好hitTest:withEvent:這個方法,還可以實現很多很復雜的功能。
            The implementation of hitTest:withEvent: in UIResponder does the following:

            •     It calls pointInside:withEvent: of self
            •     If the return is NO, hitTest:withEvent: returns nil. the end of the story.
            •     If the return is YES, it sends hitTest:withEvent: messages to its subviews. it starts from the top-level subview, and continues to other views until a subview returns a non-nil object, or all subviews receive the message.
            •     If a subview returns a non-nil object in the first time, the first hitTest:withEvent: returns that object. the end of the story.
            •     If no subview returns a non-nil object, the first hitTest:withEvent: returns self

            This process repeats recursively, so normally the leaf view of the view hierarchy is returned eventually.
            However, you might override hitTest:withEvent to do something differently. In many cases, overriding pointInside:withEvent: is simpler and still provides enough options to tweak event handling in your application.

            posted @ 2014-06-23 13:54 王海光 閱讀(316) | 評論 (0)編輯 收藏
                 摘要:       IOS開發使用委托delegate在不同窗口之間傳遞數據是本文要介紹的內容,主要是來講解如何使用委托delegate在不同窗口之間傳遞數據,具體內容來看詳細內容。在IOS開發里兩個UIView窗口之間傳遞參數方法有很多,比如 1、使用SharedApplication,定義一個變量來傳遞. 2、使用文件,或者NSUserdefaul...  閱讀全文
            posted @ 2014-06-18 14:50 王海光 閱讀(348) | 評論 (0)編輯 收藏
            1、設置背景圖片
            1     UIImageView *imgView =[[UIImageView alloc] initWithFrame:CGRectMake(128, 80,64,64)];
            2     imgView.image = [UIImage imageNamed:@"portrait.png"];
            3     imgView.userInteractionEnabled=YES;
            4     UITapGestureRecognizer *singleTap =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onClickPortraitImage)];
            5     [imgView addGestureRecognizer:singleTap];
            6     [self.view addSubview:imgView];

            2、響應點擊事件
            1 -(void)onClickPortraitImage{
            2     
            3     NSLog(@"圖片被點擊!");
            4 }

            開發工具Xcode5 系統版本:OS X 10. 9. 3 ( 13D65 )
            posted @ 2014-05-28 14:33 王海光 閱讀(348) | 評論 (0)編輯 收藏

            鼠標滾輪消息似乎只會發給當前獲得焦點的窗口,所以當子窗體沒有焦點時是收不到滾輪消息的,收到消息的可能是父窗口。

            解決:添加鼠標單擊相應函數,在響應函數中添加SetFoucs();一句,這樣強制設置焦點給子窗口,然后再滾動鼠標滾輪,子窗體就能收到滾輪消息了。

             

            問題繼續,當子窗口上有其他可以獲得焦點的控件時,比如下拉列表,這時在窗口函數中執行SetFoucs();焦點會自動跑到那個控件上去,子窗口同樣收不到滾輪消息。

            解決:在執行SetFoucs();語句前先Disable子窗體上的所有控件,然后執行SetFoucs();,再Enanle所有控件,這時焦點才會在子窗口上。

            本文轉自:http://blog.csdn.net/vanship/article/details/4119246

            posted @ 2014-05-08 16:33 王海光 閱讀(4703) | 評論 (0)編輯 收藏
                 一般地,當在目標機器編譯安裝某個服務程序后,為了使服務能開機自啟動和關機自停止,則需要將其添加為系統服務。但不同的Linux系統管理服務的方法不同,如Ubuntu使用update-rc.d命令,而RedHat則使用              chkconfig命令。因此為了能自動識別系統的類型,減少人工控制,編寫了一個簡單的autosrv腳本,要求至少1個最多2個參數,特點如下:
                 ● 第1個參數只能為install或uninstall,表示安裝或卸載服務。
                 ● 第2參數是可選的,表示系統名稱,如果沒有指定,那么會自動識別,若出現提示錯誤,則表示應該要顯式指定系統名稱了。  
              1#! /bin/bash
              2# autosrv
              3
              4if [ $# -lt 1 ]; then
              5    echo "Usage: $(basename "$0") install | uninstall [sysname]"
              6    exit
              7elif [ "$1" != "install" -a "$1" != "uninstall" ]; then
              8    echo "The first parameter must be install or uninstall" 
              9    exit
             10fi
             11
             12action=$1
             13sysname=$2
             14srv_path=/etc/init.d/srv_name
             15
             16if [ -z "$sysname" ]; then
             17    sysname=`lsb_release -a | sed -n '2p' | awk '{if($0~/[Uu][Bb][Uu][Nn][Tt][Uu]/) print "ubuntu"; else if($0~/[Dd][Ee][Bb][Ii][Aa][Nn]/) print "debian"; else if($0~/[Rr][Ee][Dd][Hh][Aa][Tt]/) print "redhat"; else if($0~/[Cc][Ee][Nn][Tt][Oo][Ss]/) print "centos"; else print ""}'`
             18    if [ -z "$sysname" ]; then
             19        echo "Unknown system, please manual special it with the second parameter"
             20        exit
             21    fi
             22    echo "Current system is $sysname"
             23fi
             24
             25create_file_ubuntu_debian()
             26{
             27cat << END > $srv_path
             28#! /bin/bash
             29. /lib/lsb/init-functions
             30
             31END
             32cat srv_name.body >> $srv_path
             33}
             34
             35create_file_redhat_centos()
             36{
             37cat << END > $srv_path
             38#! /bin/bash
             39#chkconfig:2345 90 10
             40#description: srv name
             41
             42. /etc/rc.d/init.d/functions
             43
             44END
             45cat srv_name.body >> $srv_path
             46}
             47
             48chmod_file()
             49{
             50    chmod u+x $srv_path
             51}
             52
             53remove_file()
             54{
             55    rm -f $srv_path
             56}
             57
             58install_ubuntu_debian()
             59{
             60    create_file_ubuntu_debian
             61    chmod_file
             62    update-rc.d srv_name defaults 90 10
             63}
             64
             65uninstall_ubuntu_debian()
             66{
             67    update-rc.d -f srv_name remove
             68    remove_file
             69}
             70
             71install_redhat_centos()
             72{
             73    create_file_redhat_centos
             74    chmod_file
             75    chkconfig --add srv_name
             76}
             77
             78uninstall_redhat_centos()
             79{
             80    chkconfig --del srv_name
             81    remove_file
             82}
             83
             84case "$sysname" in
             85    ubuntu|debian)
             86    if [ "$action" = "install" ]; then
             87        install_ubuntu_debian
             88    else
             89        uninstall_ubuntu_debian
             90    fi
             91    ;;
             92
             93    redhat|centos)
             94    if [ "$action" = "install" ]; then
             95        install_redhat_centos
             96    else
             97        uninstall_redhat_centos
             98    fi
             99    ;;
            100
            101    *)
            102    echo "Currently only support ubuntu, debian, redhat and centos system"
            103    exit
            104    ;;
            105esac
                  從上可知,自動識別的方法是獲取lsb_release -a返回的文本再使用awk來匹配ubuntu,redhat,debian,centos這幾個子串(忽略大小寫)。要注意的是,返回的文本可能有所不同,當系統安裝了LSB模塊時,返回結果如下
                  沒有安裝時,返回結果如下
                  無論哪種情況,要提取分析的都是第2行文本,因此使用了sed -n '2p'。srv_name.body是不同系統相同的用于生成最終服務腳本的部分代碼文件,通常包含了start,stop,status,restart幾個函數,只是沒有包含前面的一部分,而這部分則由autosrv腳本來根據不同的系統生成不同的代碼。

            本文轉自:http://www.shnenglu.com/qinqing1984/archive/2014/01/03/205140.html
            posted @ 2014-04-23 17:06 王海光 閱讀(439) | 評論 (0)編輯 收藏
            C++使用共享內存實現進程間通信
            文件映射是一種實現進程間單向或雙向通信的機制。它允許兩個或多個本地進程間相互通信。為了共享文件或內存,所有的進程必須使用相同的文件映射的名字或是句柄。
            為了實現共享文件,第一個進程先調用CreateFile方法。接下來調用CreateFileMapping方法來創建一個文件映射對象。并為文件映射指明一個句柄和名稱。由于事件,信號,互斥對象和文件映射等這些內核對象都共享同一個名字空間,所以如果這個名字和其他一個對象的名稱重名的話那么將創建失敗。
            為了實現共享內存,進程應首先調用CreateFileMapping函數然后在hFile參數中傳入INVALID_HANDLE_VALUE宏來替代句柄。相應的文件映射對象會從系統的分頁文件中獲得一段內存。如果hFile參數的值是INVALID_HANDLE_VALUE,那么你在調用CreateFileMapping時必須給共享內存指定一個大小值。
            使用共享內存或文件的進程必須使用MapViewOfFile函數或MapViewOfFileEx函數來創建一個文件視圖。
            示例代碼:
            服務端:
            HANDLE hfilemapping = NULL;
            void CCSharedMemoryDlg::OnButton1()
            {
                // TODO: Add your control notification handler code here
                hfilemapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 16, "COMBANC_SHARE");
                //創建錯誤
                if ((hfilemapping == NULL) || (hfilemapping == INVALID_HANDLE_VALUE))
                //    return lx_invalid_sharedmemory;
                    MessageBox("error");
                
                //共享內存已經存在
                if (GetLastError() == ERROR_ALREADY_EXISTS)
                {
                    MessageBox("共享內存已經存在");
                    return;
                }
                BYTE *psize = (BYTE *)MapViewOfFile(hfilemapping, FILE_MAP_WRITE, 0, 0, sizeof(BYTE));
                if(psize == NULL)
                {
                    if (hfilemapping != NULL)
                    {
                        CloseHandle(hfilemapping);
                        hfilemapping = NULL;
                    }
                    return;
                }

                CString sTest = "abc";
                char ch[16] = "COMBANC_TEST";
                memcpy(psize,sTest,sTest.GetLength());
                
                if (psize != NULL)
                {
                    UnmapViewOfFile(psize );
                    psize = NULL;
                }
            }

            客戶端:
            HANDLE hfilemapping = NULL;
            void CTestShareMemoryDlg::OnBnClickedButton1()
            {
                // TODO: Add your control notification handler code here
                 hfilemapping = OpenFileMapping(FILE_MAP_READ, FALSE, "COMBANC_SHARE");
                 if ((hfilemapping == NULL) || (hfilemapping == INVALID_HANDLE_VALUE))
                     MessageBox("error");
             
                BYTE *psize = (BYTE *)MapViewOfFile(hfilemapping, FILE_MAP_READ, 0, 0, sizeof(BYTE));
                if(psize == NULL)
                {
                    if (hfilemapping != NULL)
                    {
                        CloseHandle(hfilemapping);
                        hfilemapping = NULL;
                    }
                    return;    
                }

                char ch[16];
                memcpy(ch,psize,16);
                MessageBox(ch);

                if (psize  != NULL)
                {
                    UnmapViewOfFile(psize );
                    psize = NULL;
                }
                if (hfilemapping != NULL)
                {
                    CloseHandle(hfilemapping);
                    hfilemapping = NULL;
                }
            }
            posted @ 2014-04-11 18:37 王海光 閱讀(602) | 評論 (0)編輯 收藏

            google 的開源項目 值 得我們一用的,這些項目很有意義,甚至可以直接用在我們自己的工作上!學習編程的的一個比較好的方式就是閱讀優秀項目的源代碼,從而能夠了解作者的方法、 思路、技巧,另外閱讀源代碼對于一些朋友是枯燥乏味的,這是就可以看看項目的readme,找到項目的閃光點,我們不做開拓者那我們就做實踐者和使用者, 呵呵,下面是這些項目的列表,在這里存檔,已備今后查閱之用

             

            文本文件處理:

            Google CRUSH (Custom Reporting Utilities for SHell)   

            CRUSH是為命令行或shell scripts處理特定文字數據而制作的一系列工具,這里有指南

            C++庫和源代碼:

            Google Breakpad  

            一個開源的多平臺崩潰報告系統。   

            Google GFlags  

            Gflags是一個命令行標記的處理庫,它可以替代“getopt()”,其內置對C++的支持比如string。指南在此 。   

            Google Glog  Glog庫可執行應用級的登陸,提供基于C++式的登陸API,可用于Linux、BSD和Windows。指南見此 。 

            Google PerfTools    

            這個工具可讓開發創建更強大的應用程序,特別是那些用C++模版開發的多線程應用程序,包括TCMalloc, heap-checker, heap-profiler 和cpu-profiler。指南見此 還有這里 。 

            Google Sparse Hash    

            非常節省內存的hash-map。指南見此 。 

            Omaha – Google Update    

            Omaha,也就是Google Update,它可以保證你的軟件隨時升級到最新版本,目前很多Windows下的Google軟件都是用Omaha升級的,包括Google Chrome和Google Earth,當然你也可以用于自己的應用程序。指南看這里 還有這里 。 

            Protocol Buffers    

            Protocol Buffers是一種可擴展編碼序列數據的方式,Google在幾乎所有內部RPC協議和文件格式都使用了Protocol Buffers。指南見此 。它可以用于很多語言而且被一些IDE所支持,比如NetBeans 。 

            互聯網:

            Google Code Pretiffy  這 是一個Javascript模塊和CSS文件,它可以讓HTML頁面里的部分源碼高亮顯示,支持C/C++, Java, Python, Ruby, PHP, VisualBasic, AWK, Bash, SQL, HTML, XML, CSS, JavaScript, Makefiles和部分Perl,不支持Smalltalk和所有的CAML。例子見此 。 

            SpriteMe – easy “CSS spirtes”  SpriteMe使你可以更輕松的創造CSS Sprites(俗稱雪碧……)就是把網站要用到的圖片都堆在一張圖片里,用CSS控制調用哪個區域。它有一個自己的官網在這里 。 

            Redacisaurus    

            Reducisaurus是一個壓縮CSS和JS文件的網絡服務,基于YUI壓縮算法,運行于App Engine。 

            JaikuEngine    

            JaikuEngine是一個運行于App Engine的微博系統,由jaiku.com 運營。要查看移動客戶端的源碼可以看這里 ,這里還有介紹 。 

            Selector Shell    

            Selector Shell是一個基于瀏覽器的測試工具,它可以讓你看到CSS在不同瀏覽器里的樣式,用Javascript寫的,你可以在這里測試 。 

            Google Feed Server    

            Google Feed Server是一個開源Atom發布協議服務,基于Apache Abdera框架,允許開發者快速為當前數據源(比如數據庫)配置feed。指南見這里 和這里 。 

            Melange, the Spice of Creation    

            這 個項目的目標是創建出一個適合開源貢獻流程的框架,比如Google Summer of Code TM (GSoC)項目。使用這個框架你就可以用Google App Engine來運行Google Summer of Code項目,和其它類似項目比如Google Highly Open Participation TM Contest和GHOP。指南見此 。 

            NameBench    

            它可以查找最快的DNS服務器給你的電腦用,在Mac OS X、Windows和UNIX系統下都有命令行也有用戶界面可以幫你測試,這是Google工程師用20%自由時間寫出來的。 

            Rat Proxy    

            一個半自動化的大型被動網絡應用安全審查工具,專為精確的探測而優化,文檔在此 。 

            TopDraw    

            Top Draw是一個圖形生成程序,使用簡單的文字腳本,基于JavaScript編程語言,Top Draw可以創造出非常復雜和有趣的圖形。支持Mac OS 10.5以上系統,使用XCode開發。 

            etherpad    

            開源的EtherPad,這是一個基于網絡的實時合作文檔編輯器,這個項目主要是為了演示代碼而開發,幫助那些想在自己服務器部署Etherpad的人使用,這里有如何安裝的指南。EtherPad使用JavaScript、Java和Comet服務器來建造實時協作服務。 

            Chromium    

            Chromium是開源版的Chrome瀏覽器,Chromium的目標是建立一個新一代的強大網絡應用程序,它與Chrome有很多不同之處。這里有指導如何在Linux上編譯Chromium 。 

            V8 Google’s open source JavaScript engine  V8 是Google的開源JavaScript引擎,用C++寫成,用于Chrome瀏覽器之上。V8使用ECMAScript的ECMA-262第三版可運 行于Windows XP、Vista、Mac OS 10.5和使用IA-32或ARM處理器的Linux。V8可獨立運行也可嵌入到任何C++程序里使用,這里有指南 。 

            Chromium OS    

            Chromium OS是開源版的Chrome OS操作系統,提供快速、簡單而安全的網絡體驗,源碼在此 。 

            Android    

            Android是第一個免費、開源而且可完全自定義的移動平臺,提供完整的堆棧:一個操作系統、中間件和重要的一用應用,它包含豐富的API可以讓第三方開發者開發出強大的應用程序。 

            MySQL工具:

            Google MySQL Tools   

             

            各種管理、維護和改進MySQL數據庫性能的工具,由Google編寫,包括: 

            • mypgrep.py:一個類似pgrep的工具來管理MySQL連接
            • compact_innodb.py:可導出和重載所有表格的密集型innodb數據文件

            Google mMAIM  

            mMAIM的目標是對MySQL的監控和分析更簡單,且可以和任何環境整合使用。它可顯示主/從同步狀態,一些性能狀態,可以返回大量“show”命令的狀態等等。   

            其它:

            Stressful Application Test (stressapptest)  

            Stressful Application Test試圖讓來自處理器和I/O到內存的數據盡量隨機化,以創造出模擬現實的環境來測試現在的硬件設備是否穩定,Google就在使用它,現在是Apache 2.0許可,這里有介紹 、安裝向導 和指南 。   

            Pop and IMAP Troubleshooter  

            它用于診斷并解決客戶端到郵件服務器的連接問題。   

            OpenDuckBill  

            Openduckbill是一個Linux下簡單的命令行備份工具,可用于監視文件/目錄在有變化后是否標記為備份,并傳輸這些變化到本地備份目錄、遠程NFS導出分卷或是用rsync命令導出到遠程SSH服務器。見安裝向導 。   

            ZXing  

            ZXing(發音類似Zebra crossing)是Java的開源多格式1D/2D條碼圖像處理庫,目的是使用內置在手機上的攝像頭拍照并對條碼進行解碼,而不必與服務器通訊,它被用于Android系統。這里有向導 和支持的設備列表 。 Tesseract OCR Engine  

            Tesseract OCR引擎是1995年UNLV Accuracy測試的前三名之一,在1995和2006年之間它的進展不大,但依然是當前精度最高的OCR引擎。這個源碼可讀取二進制、灰階或彩色圖片 并輸出文字,內置一個TIFF閱讀器可讀取非壓縮的TIFF文件,增加libtiff后也可讀取壓縮圖片。指南 和問答 。   

            Neatx – Open Source NX server  

            Neatx是一個開源NX服務,類似NoMachine公司商業的NX服務。NX協議比VNX更強大,它們的區別主要在:   

            • NX是X11客戶端所以不會發送位圖
            • NX可兼容X、VNC和Windows版的Remote Desktop
            • NX可緩存數據
            • NX安裝簡單

            另外一個可選的項目可以看看Google的FreeNx 。 

            PSVM    

            它是這個文件 的代碼,這是一個SVM的“支持所有核心”的版本,可多機并行運行,實例見此 。 

            GO   

            Google開發的新編程語言,谷奧有報道 。 

            The Google Collections Library for Java    

            這是一系列與Java 5以及更高版本有關的庫,Google花錢給買過來了。 

            Google styleguide   

            每個主流的開源項目 都有它自己的向導形式,比如一系列的演示代碼。如果這些代碼都按照“Style”的形式來演示,會更友好。

            本文轉自:
            http://blog.csdn.net/hkx1n/article/details/6176573

            posted @ 2014-03-28 09:43 王海光 閱讀(653) | 評論 (0)編輯 收藏
            僅列出標題
            共27頁: 1 2 3 4 5 6 7 8 9 Last 
            久久综合亚洲欧美成人| AV无码久久久久不卡蜜桃| 精品欧美一区二区三区久久久| 品成人欧美大片久久国产欧美...| 99久久婷婷国产综合精品草原 | 久久国产美女免费观看精品| 91精品久久久久久无码| 亚洲精品乱码久久久久久中文字幕| 亚洲∧v久久久无码精品| 国产成人久久精品麻豆一区| 久久精品免费一区二区| 97久久精品无码一区二区天美| 久久黄视频| 日韩精品无码久久久久久| 久久婷婷国产麻豆91天堂| 久久伊人五月丁香狠狠色| 久久久精品午夜免费不卡| 久久精品桃花综合| 精品久久久久久无码国产| 久久精品中文闷骚内射| 亚洲国产小视频精品久久久三级| 久久精品人成免费| 精品多毛少妇人妻AV免费久久| 久久综合综合久久狠狠狠97色88| 2021最新久久久视精品爱 | 久久91这里精品国产2020| 婷婷久久香蕉五月综合加勒比| 久久亚洲中文字幕精品一区| 久久成人精品视频| 久久精品国产半推半就| 无码国产69精品久久久久网站| 一本一本久久a久久精品综合麻豆| 国产精品成人99久久久久 | 97精品伊人久久久大香线蕉| 麻豆亚洲AV永久无码精品久久| 偷偷做久久久久网站| 久久综合日本熟妇| 亚洲国产成人久久综合野外| 久久艹国产| 久久人人爽人人爽AV片| 国产一区二区三精品久久久无广告|