UIButton git
UIButton 其實包含 UIImageView 和 UILabel 兩個控件,UIButton繼承於UIControl,因此有addtarget監聽事件github
//inherits from: UIControl : UIView : UIResponder : NSObject
//初始化一個按鈕對象 // 建立 圓角矩形 的按鈕 UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // button 類型 有如下 6 種, // typedef enum { // UIButtonTypeCustom = 0, 自定義風格 // UIButtonTypeRoundedRect, 圓角矩形 // UIButtonTypeDetailDisclosure, 藍色小箭頭按鈕,主要作詳細說明用 // UIButtonTypeInfoLight, 亮色感嘆號 // UIButtonTypeInfoDark, 暗色感嘆號 // UIButtonTypeContactAdd, 十字加號按鈕 // } UIButtonType;
//設置 button在 view 上的 位置、尺寸 button1.frame = CGRectMake(20, 20, 280, 20);
//背景顏色 button1.backgroundColor = [UIColor clearColor]; //前景顏色 button1.tintColor = [UIColor redColor]; //圓角 外邊框效果 [Button1.layer setMasksToBounds:YES]; [Button1.layer setCornerRadius:10.0]; //設置矩形四個圓角半徑 [Button1.layer setBorderWidth:1.0]; //邊框寬度 (若設置button爲圓形,則setCornerRadius的值爲button的半徑) //第一種 邊框顏色 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGColorRef colorref = CGColorCreate(colorSpace,(CGFloat[]){ 1, 0, 0, 1 }); [Button1.layer setBorderColor:colorref];//邊框顏色 //第二種 Button1.layer.backgroundColor = (__bridge CGColorRef)([self colorFromHexRGB:TopSliderColor]); //第三種 Button1.layer.borderColor=[UIColor grayColor].CGColor; //導入(QuartzCore.framework)
//設置button填充 UIImage* image = [UIImage imageNamed:@"btng.png"]; [button setImage:image forState:UIControlStateNormal]; //背景圖片 [button setBackgroundImage:image forState:UIControlStateNormal]; //拿到當前圖片 image = button.currentImage; image = button.currentBackgroundImage; //按鈕圖片大小 //一、圖片命名@2x.png //二、[UIImage imageNamed:@"aa.png"] 圖片會根據按鈕的大小改變,而[UIImage imageWithContentsOfFile:imagePath] 真實顯示圖片大小 NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"search-B@2x" ofType:@"png"];
//設置button 標籤文字 [button1 setTitle:@"點擊" forState:UIControlStateNormal]; //取得title NSString* title = button.titleLabel.text; title = button.currentTitle; //設置title顏色 [button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; //取得title的顏色 UIColor* color = button.currentTitleColor; //字體、大小 button1.titleLabel.font = [UIFont fontWithName:@"Arial" size:18.0]; //文字陰影 [button1 setTitleShadowColor:[UIColor greenColor] forState:UIControlStateNormal]; [[button1 titleLabel] setShadowOffset:CGSizeMake(1, 1)]; //文字自適應 //計算UIlabel寬度,而後在設置UIButton寬度 /* forState: 這個參數的做用是定義按鈕的文字或圖片在何種狀態下才會顯現*/ //如下是幾種狀態 // enum { // UIControlStateNormal = 0, 常規狀態顯現 // UIControlStateHighlighted = 1 << 0, 高亮狀態顯現 // UIControlStateDisabled = 1 << 1, 禁用的狀態纔會顯現 // UIControlStateSelected = 1 << 2, 選中狀態 // UIControlStateApplication = 0x00FF0000, 當應用程序標誌時 // UIControlStateReserved = 0xFF000000 爲內部框架預留,能夠無論他 // }; /* * 默認狀況下,當按鈕高亮的狀況下,圖像的顏色會被畫深一點,若是這下面的這個屬性設置爲no, * 那麼能夠去掉這個功能 */ button1.adjustsImageWhenHighlighted = NO; /*跟上面的狀況同樣,默認狀況下,當按鈕禁用的時候,圖像會被畫得深一點,設置NO能夠取消設置*/ button1.adjustsImageWhenDisabled = NO; /* 下面的這個屬性設置爲yes的狀態下,按鈕按下會發光*/ button1.showsTouchWhenHighlighted = YES; //水平對齊 [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; //垂直對齊方式 [button1 setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom]; //內部內容邊距 [button1 setContentEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)]; //文字內在距離 button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
/* 給button添加點擊事件,事件有不少種,我會單獨開一篇博文介紹它們,下面這個事件的意思是 按下按鈕,而且手指離開屏幕的時候觸發這個事件,跟web中的click事件同樣。 觸發了這個事件之後,執行butClick:這個方法,addTarget:self 的意思是說,這個方法在本類中 也能夠傳入其餘類的指針 */ [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside]; //添加一個方法 來相應按鈕的點擊時間 - (void)buttonClick:(UIButton*)button{ //父視圖經過tag值獲取子視圖的指針對象 /* 子視圖能夠設置一個tag值,而後添加到父視圖上,父視圖就能夠經過這個tag值拿到子視圖的指針。 tag值也能夠保存一些用戶的信息。 */ UILabel* label = (UILabel*)[self.window viewWithTag:100]; label.text = @"我被修改了"; }
//添加button到當前窗口的根視圖 [self.view addSubview:button1];
八、web
九、框架
問題解答ide
//改button的type爲: UIButtonTypeCustom
//dial_mute字體
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(50, 100, 50, 50); [button setImage:[UIImage imageNamed:@"dial_mute"] forState:UIControlStateNormal]; button.layer.borderColor = [UIColor whiteColor].CGColor; button.layer.borderWidth = 1.0; [button.layer setMasksToBounds:YES]; [button.layer setCornerRadius:25.0];//爲button的半徑,就是寬或高的一半
說明:根據UIControlState 、 selected 來切換圖片,記住是否選中狀態spa
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(150, 150, 20, 20); [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchDown]; [button setImage:[UIImage imageNamed:@"checkbox_checkedunable"] forState:UIControlStateNormal]; [button setImage:[UIImage imageNamed:@"checkbox_checked"] forState:UIControlStateSelected]; [self.view addSubview:button]; - (void)buttonClick:(UIButton *)button{ if (button.selected) { button.selected = NO; }else{ button.selected = YES; } } - (BOOL)isRemember{ return _button.selected; }
https://github.com/antoniocasero/ACPButton
很好的開源封裝指針
- (UIImage*)transformWidth:(CGFloat)width height:(CGFloat)height image:(NSString *)imageName { CGFloat destW = width; CGFloat destH = height; CGFloat sourceW = width; CGFloat sourceH = height; UIImage *image = [UIImage imageNamed:imageName]; CGImageRef imageRef = image.CGImage; CGContextRef bitmap = CGBitmapContextCreate(NULL, destW, destH, CGImageGetBitsPerComponent(imageRef), 4*destW, CGImageGetColorSpace(imageRef), (kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst)); CGContextDrawImage(bitmap, CGRectMake(0, 0, sourceW, sourceH), imageRef); CGImageRef ref = CGBitmapContextCreateImage(bitmap); UIImage *resultImage = [UIImage imageWithCGImage:ref]; CGContextRelease(bitmap); CGImageRelease(ref); return resultImage; }