1. 程式人生 > >UILabel UIFont--字型屬性和一些特效【轉】

UILabel UIFont--字型屬性和一些特效【轉】

UILabel UIFont

//UILabel垂直居上對齊:

[label sizeToFit];

//設定文字過長時的顯示格式

label.lineBreakMode = UILineBreakModeWordWrap;
typedefenum {
    UILineBreakModeWordWrap =0,
    UILineBreakModeClip,//截去多餘部分  
    UILineBreakModeHeadTruncation, //截去頭部
    UILineBreakModeTailTruncation,//截去尾部 
    UILineBreakModeMiddleTruncation,//截去中間
} UILineBreakMode;

//設定label的行數,這個可以根據上節的UITextView自適應高度

label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeWordWrap;

//字型相關屬性設定

//設定文字對齊位置,居左,居中,居右 
label.textAlignment =  UITextAlignmentCenter;
//設定顯示文字 
label.text = @ "123" ;
//設定文字顏色,可以有多種顏色可以選擇
label.textColor = [UIColor whiteColor];
//設定背景顏色
label.backgroundColor = [UIColor blackColor]; //設定字型:粗體,正常的是 SystemFontOfSize,呼叫系統的字型配置 label.font = [UIFont boldSystemFontOfSize:20]; label.font = [UIFont fontWithName:@ "Arial Rounded MT Bold" size:(36.0)]; //[UIFont fontWithName:@ "Arial" size:14.0]]; //非加粗 //設定文字是否高亮和高亮時的顏色 scoreLabel.highlighted = YES
; scoreLabel.highlightedTextColor = [UIColor orangeColor]; //設定陰影的顏色和陰影的偏移位置 scoreLabel.shadowColor = [UIColor redColor]; scoreLabel.shadowOffset = CGSizeMake(1.0,1.0); //設定是否能與使用者進行互動 scoreLabel.userInteractionEnabled = YES; //設定label中的文字是否可變,預設值是YES scoreLabel.enabled = NO; //設定字型大小是否適應label寬度 label.adjustsFontSizeToFitWidth = YES; //如果adjustsFontSizeToFitWidth屬性設定為YES,下面這個屬性就來控制文字基線的行為 coreLabel.baselineAdjustment = UIBaselineAdjustmentNone typedefenum { UIBaselineAdjustmentAlignBaselines =0,// default. used when shrinking text to position based on the original baseline UIBaselineAdjustmentAlignCenters, UIBaselineAdjustmentNone, } UIBaselineAdjustment; //最小文字號數 minimumFontSize //設定背景色為透明 scoreLabel.backgroudColor=[UIColor clearColor]; //自定義的顏色: scoreLabel.textColor = [UIColor colorWithRed:1.0f green:50.0f blue:0.0f alpha:1.0f]; //UIColor 裡的 RGB 值是CGFloat型別的在0~1範圍內,對應0~255的顏色值範圍。 - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines; //改變繪文字屬性.重寫時呼叫super可以按預設圖形屬性繪製,若自己完全重寫繪製函式,就不用呼叫super了. - (void)drawTextInRect:(CGRect)rect; //宣告UIlbel並指定其位置和長寬 UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, 75, 40)]; //設定label的背景色,這裡設定為透明色。 label.backgroundColor = [UIColorclearColor]; //設定label的字型和字型大小。 label.font = [UIFont fontWithName:@"Helvetica-Bold" size:13]; //lable的旋轉 label.transform = CGAffineTransformMakeRotation(0.1); //設定label的旋轉角度 //設定文字的陰影色彩和透明度。 label.shadowColor = [UIColorcolorWithWhite:0.1falpha:0.8f]; //設定陰影的傾斜角度。 label.shadowOffset = CGSizeMake(2.0f, 2.0f); //換行:如下換行可實現多行顯示,但要求label有足夠的寬度。 label.lineBreakMode = UILineBreakModeWordWrap; //**label文字自動調整寬度和高度** //初始化 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)]; //初始行數為0 [label setNumberOfLines:0]; //label顯示文字 NSString *s = @"string......"; //設定字型 UIFont *font = [UIFont fontWithName:@"Arial" size:12]; //自定義大小 CGSize size = CGSizeMake(320,2000); //重設label的size CGSize labelsize = [s sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap]; //重設frame [label setFrame:CGRectMake:(0,0, labelsize.width, labelsize.height)]; [self.view addSubView:label]; 這樣就可以對s賦值讓其自動調整其大小了。

//UILabel跑馬燈效果

#import <UIKit/UIKit.h>
@interface TextFlowView : UIView { 
    //顯示文字的標籤
    UILabel *_firstLabel;
    UILabel *_secondLabel;   
    //定時器
    NSTimer *_timer;
    //顯示的文字
    NSString *_text;
    //是否需要滾動
    BOOL _needFlow;
    //控制元件的框架大小
    CGRect _frame;
    //文字的字型
    UIFont *_font;
    //當前第一個控制元件的索引
    NSInteger _startIndex;
    //定時器每次執行偏移後,累計的偏移量之和
    CGFloat _XOffset;
    //文字顯示一行,需要的框架大小
    CGSize _textSize;  
}
- (id)initWithFrame:(CGRect)frame Text:(NSString *)text;
- (void)setFont:(UIFont *)font;
- (void)setText:(NSString *)text;
@end
#import "TextFlowView.h"
@implementation TextFlowView
#pragma mark -
#pragma mark 內部呼叫
#define SPACE_WIDTH 50
#define LABEL_NUM 2

//改變一個TRect的起始點位置,但是其終止店點的位置不變,因此會導致整個框架大小的變化
- (CGRect)moveNewPoint:(CGPoint)point rect:(CGRect)rect
{
    CGSize tmpSize;
    tmpSize.height = rect.size.height + (rect.origin.y - point.y);
    tmpSize.width = rect.size.width + (rect.origin.x - point.x);
    returnCGRectMake(point.x, point.y, tmpSize.width, tmpSize.height);
}

//開啟定時器
- (void)startRun
{
    _timer = [NSTimerscheduledTimerWithTimeInterval:0.02target:selfselector:@selector(timerAction) userInfo:nilrepeats:YES];
}

//關閉定時器
- (void)cancelRun
{
    if (_timer) 
    {
        [_timerinvalidate];
    }
}

//定時器執行的操作
- (void)timerAction
{
    staticCGFloat offsetOnce = -1;
    _XOffset += offsetOnce;
    if (_XOffset +  _textSize.width <= 0) 
    {
        _XOffset += _textSize.width;
        _XOffset += SPACE_WIDTH;
    }
    [selfsetNeedsDisplay];   
}

//計算在給定字型下,文字僅顯示一行需要的框架大小
- (CGSize)computeTextSize:(NSString *)text
{
    if (text == nil) 
    {
        returnCGSizeMake(0, 0);
    }

    CGSize boundSize = CGSizeMake(10000, 100);
    CGSize stringSize = [_textsizeWithFont:_fontconstrainedToSize:boundSize lineBreakMode:UILineBreakModeWordWrap];
    return stringSize;

- (id)initWithFrame:(CGRect)frame Text:(NSString *)text
{
    self = [superinitWithFrame:frame];
    if (self) 
    {
        _text = [text retain];
        _frame = frame;
        //預設的字型大小
        _font = [UIFontsystemFontOfSize:16.0F];
        self.backgroundColor = [UIColorredColor];
        //初始化標籤
        //判斷是否需要滾動效果
        _textSize = [selfcomputeTextSize:text];
        //需要滾動效果
        if (_textSize.width > frame.size.width) 
        {
            _needFlow = YES;
            [selfstartRun];
        }
    }
    returnself;
}



- (void)drawRect:(CGRect)rect
{
    CGContextRef context= UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColorwhiteColor].CGColor);
    // Drawing code
    CGFloat startYOffset = (rect.size.height - _textSize.height)/2;
    CGPoint origin = rect.origin;
    if (_needFlow == YES) 
    {
         rect = [selfmoveNewPoint:CGPointMake(_XOffset, startYOffset) rect:rect];
         while (rect.origin.x <= rect.size.width+rect.origin.x) 
        {
            [_textdrawInRect:rect withFont:_font];
            rect = [selfmoveNewPoint:CGPointMake(rect.origin.x+_textSize.width+SPACE_WIDTH, rect.origin.y) rect:rect];
        }

    }
    else
    {
        //在控制元件的中間繪製文字
        origin.x = (rect.size.width - _textSize.width)/2;
        origin.y = (rect.size.height - _textSize.height)/2;
        rect.origin = origin;
        [_textdrawInRect:rect withFont:_font];
    }
}
//此處,如果開啟了記憶體自動管理則沒必要加
- (void)dealloc
{
    [_textrelease];
    [superdealloc];
}

#pragma mark -
#pragma mark 外部呼叫
- (void)setFont:(UIFont *)font
{
    _font = font;
}
- (void)setText:(NSString *)text
{
    [_textrelease];
    _text = [text retain];
}
@end

美化UILabel中的字型程式碼分享

UILabel跑馬燈效果

垂直頂端對齊的UILabel

讓UILabel具有連結功能,點選後呼叫safari開啟網址

   UILabel *labelGovUrl = [[UILabel alloc] initWithFrame:CGRectMake(73.0, 330.0, 180.0, 40.0)];    
    labelGovUrl.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);    
    labelGovUrl.text = @"儂儂官網 >";    
    labelGovUrl.backgroundColor = [UIColor clearColor];    
    labelGovUrl.textColor = [UIColor whiteColor];    
    labelGovUrl.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];    
    labelGovUrl.userInteractionEnabled = YES;    
    labelGovUrl.tag = K_NNGOV_WEBSITE_LABEL_URL;    

    UITapGestureRecognizer *tapGesture =    
    [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openURL:)] autorelease];    
    [labelGovUrl addGestureRecognizer:tapGesture];    
    [self.view addSubview:labelGovUrl];    
    [labelGovUrl release];    


-(void)openURL:(UITapGestureRecognizer *)gesture{    
    NSInteger tag = gesture.view.tag;    
    NSString *url = nil;    
    if (tag == K_NNWEIBO_LABEL_URL) {    
        url = @"http://t.qq.com/yourgame/";    
    }    
    if(tag == K_NNGOV_WEBSITE_LABEL_URL){    
        url = @"http://www.zjnn.cn/";    
    }    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];    
}    

相關推薦

UILabel UIFont--字型屬性一些特效

UILabel UIFont //UILabel垂直居上對齊: [label sizeToFit]; //設定文字過長時的顯示格式 label.lineBreakMode = UILineBreakModeWordWrap; typedefe

Java Map按照KeyValue排序

try lin tor put array ava ble nbsp key package kingtool.sort; import java.util.ArrayList; import java.util.Collections; import java.ut

Oracle 11G R2 RAC中的scan ip 的用途基本原理

partition lease 重試 方便 documents 簡單的 scrip html reserve Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client鏈接數據庫的時候要用vip,假如你的cluster有4個節點,那麽客戶端的t

安裝使用Redis

usr time 成功 col -a data- too then comment Redis是一個高性能的內存數據庫,它體積輕巧性能又高,在企業中被廣泛使用。 安裝Redis Windows安裝 Redis是為Linux系統設計的,但是也有團隊為Windows做了移

淺析exit()atexit()函式

  (轉自:https://blog.csdn.net/wy1550365215/article/details/70216750) 當核心使用一個一個exec函式執行c程式時,在呼叫main函式之前先呼叫一個特殊的啟動例程,可執行程式需將此例程指定為程式的起始地址。啟動例程從核心

Linux : select()詳解 實現原理

https://www.cnblogs.com/sky-heaven/p/7205491.html#4119169   轉自:http://blog.csdn.net/huntinux/article/details/39289317 原文:http://blog.csdn.n

Numpy 筆記: 多維陣列的切片(slicing)索引(indexing)

目錄 切片(slicing)操作 索引(indexing) 操作 最簡單的情況 獲取多個元素 切片和索引的同異 切片(slicing)操作 Numpy 中多維陣列的切片操作與 Py

詳解likelyunlikely函式

 核心原始碼:linux-2.6.38.8.tar.bz2      在Linux核心中likely和unlikely函式有兩種(只能兩者選一)實現方式,它們的實現原理稍有不同,但作用是相同的,下面將結合linux-2.6.38.8版本的核心程式碼來進行講解。

迴圈列表雙向列表

本文圍繞以下兩個部分展開: 一、迴圈連結串列(circular linked list) 二、雙向連結串列(double linked list) 一、迴圈連結串列(circular linked list)          1. 概念          將單鏈表中終端

camera理論基礎工作原理

轉自:http://www.cnblogs.com/fjutacm/p/220631977df995512d136e4dbd411951.html 寫在前面的話,本文是因為工作中需要編寫攝像頭程式,因為之前沒有做過這類產品,所以網上搜索的資料,先整理如下,主要參考文章如下,如果有侵權,請聯絡我;另外,轉載請

通過SIMPLE_DEV_PM_OPS定義suspendresume函式

本文轉載自:https://blog.csdn.net/tiantao2012/article/details/77851782 通過SIMPLE_DEV_PM_OPS 定義這個驅動的suspend和resume函式,如果沒有定義CONFIG_PM_SLEEP的時候就將CONFIG_PM_SLEEP定義為空

PLSQL DEVELOPER 使用的一些技巧

預設情況下,PLSQL Developer登入後,Brower裡會選擇All objects,如果你登入的使用者是dba,要展開tables目錄,正常情況都需要Wait幾秒鐘,而選擇My Objects後響應速率則是以毫秒計算的。 Tools選單 --> Object Brower Filters,

讓PIP源使用國內映象,提升下載速度安裝成功率

對於Python開發使用者來講,PIP安裝軟體包是家常便飯。但國外的源下載速度實在太慢,浪費時間。而且經常出現下載後安裝出錯問題。所以把PIP安裝源替換成國內映象,可以大幅提升下載速度,還可以提高安裝成功率。 國內源: 新版ubuntu要求使用https源,要注意。 清華:https://pypi.tu

什麼是死鎖及死鎖的必要條件解決方法

一、要點提示 (1) 掌握死鎖的概念和產生死鎖的根本原因。 (2) 理解產生死鎖的必要條件–以下四個條件同時具備:互斥條件、不可搶佔條件、佔有且申請條件、迴圈等待條件。 (3) 記住解決死鎖的一般方法,掌握死鎖的預防和死鎖的避免二者的基本思想。 (4) 掌握死鎖

硬中斷軟中斷

地址 against turn 的區別 address lis 內核線程 後退 分配 轉自:https://blog.csdn.net/zhangskd/article/details/21992933 版權聲明:本文為博主原創文章,轉載請註明出處。 https://bl

WPF關於依賴屬性的ValidateValueCallback,PropertyChangedCallbackCoerceValueCallback的執行順序

value read ado args cep img 強制轉換 .cn clas 三個回調對應依賴屬性的驗證過程,改變過程和強制轉換過程。 class Dobj : DependencyObject { //依賴屬性包裝 public int MyPro

大型Vuex項目 ,使用module後, 如何調用其他模塊的 屬性方法

lan fff log fig 一個 cti ons 選項 actions Vuex 允許我們把 store 分 module(模塊)。每一個模塊包含各自的狀態、mutation、action 和 getter。 那麽問題來了, 模塊化+命名空間之後, 數據都是相對獨立的,

JavaScript 節點操作 以及DOMDocument屬性方法

表示 位置 clas 句柄 doc elements nta XML sele 最近發現DOMDocument對象很重要,還有XMLHTTP也很重要 註意大小寫一定不能弄錯. 屬性: 1Attributes 存儲節點的屬性列表(只讀) 2childNodes 存儲節點的子

關於java 單元測試Junit4Mock的一些總結

原文出處請點選這裡 1. 單元測試的必要性 最近專案有在寫java程式碼的單元測試,然後在思考一個問題,為什麼要寫單元測試??單元測試寫了有什麼用??百度了一圈,如下: 軟體質量最簡單、最有效的保證; 是目的碼最清晰、最有效的文件;

AD9854原理圖、PCB設計原始檔,AD9854的簡要介紹及使用心得一些建議——電路模組使用心得1

原理圖: 鄙人習慣在原理圖上將各種細節標註清楚~ PCB : 3D封裝看著舒服~ 晶片主要特點: 1. 高達300MHz的系統時鐘; 2. 能輸出一般調製訊號,FSK,BPSK,PSK,CHIRP,AM等; 3. 100MHz時具有80dB的信噪比; 4.