UI-切圓角、透明度、取消按鈕點擊高亮效果、按鈕文字帶下劃線

来源:http://www.cnblogs.com/panda1024/archive/2016/12/01/6123580.html
-Advertisement-
Play Games

一、切UIView的某個角為圓角 如果需要將UIView的4個角全部都為圓角,做法相當簡單,只需設置其Layer的cornerRadius屬性即可(項目需要使用QuartzCore框架)。而若要指定某幾個角(小於4)為圓角而別的不變時,怎麼做呢? 其實很簡單,使用UIBezierPath,設置CAS ...


一、切UIView的某個角為圓角

如果需要將UIView的4個角全部都為圓角,做法相當簡單,只需設置其Layer的cornerRadius屬性即可(項目需要使用QuartzCore框架)。而若要指定某幾個角(小於4)為圓角而別的不變時,怎麼做呢?

其實很簡單,使用UIBezierPath,設置CAShapeLayer,給UIView設置遮罩效果即可。

// 圖標左上、左下切圓角
UIBezierPath *phoneIconPath = [UIBezierPath bezierPathWithRoundedRect:self.phoneBGView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(5, 5)];

CAShapeLayer *phoneIconLayer = [[CAShapeLayer alloc] init];

phoneIconLayer.frame = self.phoneBGView.bounds;
phoneIconLayer.path = phoneIconPath.CGPath;

self.phoneBGView.layer.mask = phoneIconLayer;
// 上面代碼很簡單,這裡列下枚舉值,根據即可添加即可
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
    UIRectCornerTopLeft     = 1 << 0,
    UIRectCornerTopRight    = 1 << 1,
    UIRectCornerBottomLeft  = 1 << 2,
    UIRectCornerBottomRight = 1 << 3,
    UIRectCornerAllCorners  = ~0UL
};

 

二、改變UIView的透明度

1、如果一個View上有子控制項,這個View的alpha改變時,子控制項的透明度也會隨著改變;

2、如果這個View是UITextField,它的alpha改變時,它的placeHolder的顏色和textColor都會隨著改變;

要求:改變View透明度,怎麼使其他保持原樣?

解答:這個時候,不要再改變alpha了,會影響其他控制項的,只需要設置背景色的透明度即可。

// 通過改變背景色的透明度,不會影響其他控制項及屬性
self.pswTF.backgroundColor = [UIColor colorWithWhite:1 alpha:0.3];

 

3、怎麼改變UITextField的placeHolder的顏色呢?

太簡單了,通過運行時及KVC改變:

// 文本框更換placeHolder顏色
[self.userNameTF setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];

 

三、按鈕點擊的時候,會有高亮效果,怎麼取消呢?

看下麵的圖,太簡單了,這裡就不再上代碼了。

1、Button的Type改為Custom;

2、不要勾選Highlighted Adjusts Image。

 

 

四、怎麼給按鈕的文字下麵添加下劃線呢?

思路:自定義控制項,在Button的子控制項titleLabel下麵劃線。然後StoryBoard中設置Button的Class為自定義類,添加畫線顏色即可。

#import <UIKit/UIKit.h>

IB_DESIGNABLE
@interface KTButton : UIButton

// 文字下麵的下劃線顏色
@property(nonatomic,strong) IBInspectable UIColor *lineColor;

@end
#import "KTButton.h"

@implementation KTButton

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
    }
    return self;
}

-(void)setColor:(UIColor *)color{
    _lineColor = [color copy];
    [self setNeedsDisplay];
}


- (void) drawRect:(CGRect)rect {
    CGRect textRect = self.titleLabel.frame;
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    
    CGFloat descender = self.titleLabel.font.descender;
    if([_lineColor isKindOfClass:[UIColor class]]){
        CGContextSetStrokeColorWithColor(contextRef, _lineColor.CGColor);
    }
    
    CGContextMoveToPoint(contextRef, textRect.origin.x, textRect.origin.y + textRect.size.height + descender + 1 + 2);
    CGContextAddLineToPoint(contextRef, textRect.origin.x + textRect.size.width, textRect.origin.y + textRect.size.height + descender + 1 + 2);
    
    CGContextClosePath(contextRef);
    CGContextDrawPath(contextRef, kCGPathStroke);
}

@end

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、條紋背景 利用background為linear-gradient函數實現,linear-gradient取值如下: <angle>:角度,漸變的方向 to left right top bottom color:指定顏色 color-stop:指定漸變的起止顏色 length:用長度值指定起止 ...
  • 開篇語 作為一個前端的菜鳥,總是在面試的時候被問及一些優化的問題,說實話,回答的時候總是心虛,因為確實沒有真真正正做過優化對比,也不知道從何說起,今天在網上收集一些例子加以總結,日後若是開發用到,也能一一對照,把自己開發的網站做到最優化! 網站優化 一個網站的優化,前端只是很小的一部分。大到系統架構 ...
  • // <![CDATA[ function init() { var $$ = go.GraphObject.make; myDiagram = $$(go.Diagram, "myDiagramDiv", { grid: $$(go.Panel, "Grid", $$(go.Shape, "Lin ...
  • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box { border: 2px solid deeppink; width: 1000px; margin: ...
  • /*socket.io是一個基於 node.js 的項目,其主要作用是將WebScoket 協議應用到所有的瀏覽器。該模塊主要應用於實時的長連接 多請求的項目中,例如線上聯網游戲中、實時聊天、實施股票查看、二維碼掃描登錄等。 安裝配置和 npm 一樣: npm intall scoket.io 安裝 ...
  • 正常情況下直接寫這段代碼不寫!important,如果項目不能生效,需要加!important。 ...
  • 這是一段用jquery實現全選的代碼,主要思路如下: 1.所有的覆選框都有單擊事件,所有效果都是在單擊事件下實現的 2.全選覆選框所實現的功能與其他覆選選項實現的功能不同,所有在單擊事件內做一個判斷,是否是全選覆選框的單擊事件 3.如果是,則執行判斷全選覆選框是否選中,如果當前狀態為選中,那麼點擊後 ...
  • 之前關於如何實現屏幕頁面切換,寫過一篇博文《Android中使用ViewFlipper實現屏幕切換》,相比ViewFlipper,ViewPager更適用複雜的視圖切換,而且Viewpager有自己的adapter,這也讓其適應複雜對象,實現數據的動態載入。 ViewPager是谷歌官方給我們提供的 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...