iOS可復用控制項之表盤

2021-08-09 07:11:09 字數 4729 閱讀 9797

效果:

實現:// 實際應用中,整個區域經常需要分為偏低區域、適中區域、偏高區域等不同的劃分區域,要用不同的顏色標識,這裡我們預設劃分低、中、高三個區域,所以需要兩個區域的間隔值

//  htdialview.h

#import

@inte***ce

htdialview :

uiview

@property

(nonatomic

,assign

)cgfloat

minvalue;  // 表盤下限值

@property

(nonatomic

,assign

)cgfloat

maxvalue;  // 表盤上限值

@property

(nonatomic

,assign

)cgfloat

firstseparationvalue;  // 第乙個區域間隔值

@property

(nonatomic

,assign

)cgfloat

secondseparationvalue;  // 第二個區域間隔值

// 設定指標指向的值

- (void

)pointvalue:(

cgfloat

)value;

@end

//  htdialview.m

#import

"htdialview.h"

@inte***ce

htdialview()

@property

(nonatomic

,strong

)uiview

*pointerview;  // 指標

@end

@implementation

htdialview

- (void

)drawrect:(

cgrect

)rect

- (instancetype

)initwithframe:(

cgrect

)frame

return 

self;

} // 初始化檢視方法

- (void

)configviews

// 繪製劃分區域及顏色

- (void

)drawareas

cgcontextref

contextref =

uigraphicsgetcurrentcontext

();

cgsize

viewsize =

self

.bounds

.size;

cgpoint

center =

cgpointmake

(viewsize.

width/2

, viewsize.

height/2

); cgfloat

radius = viewsize.

width/2

; // 繪製低值區域

cgfloat

lowareaangle = (

self

.firstseparationvalue

-self

.minvalue

)/(self

.maxvalue

-self

.minvalue

) * (

1.5*

m_pi);

cgcontextbeginpath

(contextref);

cgcontextmovetopoint

(contextref, center.

x, center.y);

cgcontextaddarc

(contextref, center.

x, center.

y, radius,

m_pi_2

,m_pi_2

+ lowareaangle,0);

cgcontextsetfillcolorwithcolor

(contextref, [

uicolor 

colorwithred:0

/255.0 

green

:102.0

/255.0 

blue

:255.0

/255.0 

alpha

:1.0

].cgcolor);

cgcontextfillpath

(contextref);

// 繪製中值區域

cgfloat

middleareaangle = (

self

.secondseparationvalue

-self

.firstseparationvalue

)/(self

.maxvalue

-self

.minvalue

) * (

1.5*

m_pi);

cgcontextbeginpath

(contextref);

cgcontextmovetopoint

(contextref, center.

x, center.y);

cgcontextaddarc

(contextref, center.

x, center.

y, radius,

m_pi_2

+ lowareaangle,

m_pi_2

+ lowareaangle + middleareaangle,0);

cgcontextsetfillcolorwithcolor

(contextref, [

uicolor 

colorwithred:13

/255.0 

green

:142

/255.0 

blue:0

/255.0 

alpha

:1.0

].cgcolor);

cgcontextfillpath

(contextref);

// 繪製高值區域

cgcontextbeginpath

(contextref);

cgcontextmovetopoint

(contextref, center.

x, center.y);

cgcontextaddarc

(contextref, center.

x, center.

y, radius,

m_pi_2

+ lowareaangle + middleareaangle,

m_pi*2

,0);

cgcontextsetfillcolorwithcolor

(contextref, [

uicolor 

colorwithred

:250

/255.0 

green:47

/255.0 

blue:47

/255.0 

alpha

:1.0

].cgcolor);

cgcontextfillpath

(contextref);

// 繪製遮罩圓,只展示環形區域

cgcontextbeginpath

(contextref);

cgcontextmovetopoint

(contextref, center.

x, center.y);

cgcontextaddarc

(contextref, center.

x, center.

y, radius *

0.8,0,

m_pi*2

,0);

cgcontextsetfillcolorwithcolor

(contextref,

self

.backgroundcolor

.cgcolor);

cgcontextfillpath

(contextref);

} // 設定指標指向的值

- (void

)pointvalue:(

cgfloat

)value

// 指標旋轉動畫 [

uiview 

animatewithduration

:1.0 

animations

:^ else

}]; }

使用://  viewcontroller.m

#import

"viewcontroller.h"

#import

"htdialview.h"

@inte***ce

viewcontroller()

@end

@implementation

viewcontroller

- (void

)viewdidload

iOS可復用控制項之調節控制項

效果 實現 htadjustview.h import inte ce htadjustview uiview 設定名稱 當前值 單位 上限值 下限值 void setname nsstring name value cgfloat value unit nsstring unit maxvalue...

重構之可復用

size medium color blue 根據前一篇的思維我進行著第一步拆分,但是在拆分的過程中怎麼才算是已經拆分到最小呢?這個我思考了很久。最後我想的決定是 1.拆分的最小方法能夠重用。2.能夠簡單進行junit單元測試。3.拆分的最小方法盡量邏輯單一。4.盡力滿足類似資料可提交的事務那樣的乙...

iOS學習之UIPickerView控制項的簡單使用

uipickerview控制項在給使用者選擇某些特定的資料時經常使用到,這裡演示乙個簡單的選擇資料,顯示在uitextfield輸入框裡,把uipickerview作為輸入view,用 作為選定資料的按鈕。和其他uitableview控制項相似,uipickerview也需要資料來源。我們要實現的效...