iOS開發 基礎篇 iOS的一畫素線

2022-06-02 07:18:14 字數 2118 閱讀 5567

首先為什麼要畫一畫素的線?當我們在**中或storyboard中設定座標系統中的任何圖形時,採用的是point來衡量。但實際渲染的時候是用畫素來渲染的,只不過這之間的轉換是系統自動幫我們做的,這樣做的好處是我們不用關心是否是retina屏,直接按照一套座標設定即可。

但我們要知道在座標系統中1 point的線在非retina螢幕是乙個畫素,在retain螢幕上可能是2個或三個,取決於系統設定的api(螢幕的api?)

在ios系統中,uiscreen,uiview,uiimage,calayer都提供相關屬性來獲取scale factor(縮放效果),所以我們在螢幕上看到的都是縮放後的效果。因為系統自動的幫助我們處理了scale factor,例如在drawrrct方法中,uikit自動的根據當前運動的裝置設定正切的scale factor.

所以說我們在大多數情況下都不需要關注畫素的轉化,但是當我們要畫乙個只有一畫素的分割線時,就需要畫乙個一畫素的線,但是要畫1個畫素的線怎麼畫呢?按照前面的邏輯,很自然的我們在**中首先要建乙個子檢視把它的高設為乙個畫素,然後在把它新增到父檢視中,如下:

- (void)viewdidload {

[superviewdidload];

// do any additional setup after loading the view, typically from a nib.

floatsortapixel =1.0/[uiscreenmainscreen].scale;

uiview*line = [[uiviewalloc]initwithframe:

cgrectmake(0,20,self.line2.frame.size.width, sortapixel)];

line.backgroundcolor=[uicolorblackcolor];

[self.viewaddsubview:line];//線是否加

這樣的話這條線的高不管iphone5s,iphone6,6plus,確實像是1畫素

那麼現在問題來了,我現在僅僅是用**建立了一條一畫素的線,然後新增到父檢視上,那麼怎麼用storyboard顯示一條一畫素的線呢?其實很簡單,在storyboard中隨意拉一條橫線,把他的高隨便設,自動布局約束高的值也隨便設,把高的約束連到控制器中,直接

在viewdidload設定約束的值為1畫素,因為viedidload是最接近顯示的方法,所以這樣也能得到一畫素的線,如下

@property(weak,nonatomic)iboutletnslayoutconstraint*onepixelviewheightconstraint;

@end

@implementationviewcontroller

- (void)viewdidload {

[superviewdidload];

// do any additional setup after loading the view, typically from a nib.

self.onepixelviewheightconstraint.constant=1.f/[uiscreenmainscreen].scale;

上面我們已經做到隨便拉一條線,這要在viewdidload方法裡把它的高約束為1畫素就可以了,慢點,等等,那我們豈不是每當需要一畫素的分割線時,就得把這條線的約束拉到對應的控制器中,還得在viewdidload裡給他賦值,那乙個專案裡得需要這樣多少個分割線,又得賦多少次值呢?不敢想。

所以我們需要在storyboad中建立乙個線的時候,約束好他的高為1以後,不需要連線,就可以在storyboard中直接設定它的高為1畫素,怎麼做呢?建乙個繼承nslayoutconstraint的類,在.m awakefromnib方法中 當當前的約束=1點時,當前的約束變成1畫素,

#import"nslayoutconstrainthairline.h"

@implementationnslayoutconstrainthairline

-(void) awakefromnib

[superawakefromnib];

if(self.constant==1)self.constant=1/[uiscreenmainscreen].scale;

@end

然後讓約束為1的的高(寬也行)繼承的類變成約束類以後,他的寬高都變成一畫素了。

iOS開發基礎篇 CoreLocation定位服務

cllocationmanager的常用操作和屬性locmanager cllocationmanager alloc init 設定每隔100公尺更新位置locmanager.distancefilter 100 設定位置精度locmanager.desiredaccuracy kcllocati...

基礎篇 ios開發概述

ios是由蘋果公司開發的移動作業系統。蘋果公司最早於2007年1月9日的macworld大會上公布這個系統,最初是設計給iphone使用的,後來陸續套用到ipod touch ipad上。ios與蘋果的macos作業系統一樣,屬於類unix的商業作業系統。原本這個系統名為iphone os,因為ip...

基礎篇 ios開發概述

ios是由蘋果公司開發的移動作業系統。蘋果公司最早於2007年1月9日的macworld大會上公布這個系統,最初是設計給iphone使用的,後來陸續套用到ipod touch ipad上。ios與蘋果的macos作業系統一樣,屬於類unix的商業作業系統。原本這個系統名為iphone os,因為ip...