仿汽車之家 價格區間選擇控制項

2021-07-10 01:29:02 字數 3700 閱讀 4664

仿照汽車之家ios客戶端「找車」欄目的**區間選擇控制項,最終實現效果如下:

*根據螢幕大小以及刻度的大小,巨集定義需要用到的一些值

#define screenw [uiscreen mainscreen].bounds.size.width

#define screenh [uiscreen mainscreen].bounds.size.height

#define pricebgw 271.0

#define pricebgh 21.0

#define pricebgx (screenw - pricebgw)*0.5

#define pricebgy (screenh - pricebgh)*0.5

#define pricemax (screenw*0.5 + pricebgw*0.44)

#define pricemin (screenw*0.5 - pricebgw*0.45)

#define node1 (pricebgx + 103)

專案中用了兩張,一張是刻度圖(紫色框中的uiimageview,命名為[email protected]),一張是把手圖(兩個紅色框內分別有乙個uiimageview,命名為[email protected]),藍色框內的進度條,使用乙個uiview來實現,而使用uilabel來顯示使用者選擇的數值範圍。

我們把介面實現的**寫到乙個函式中,函式名為setupview,並在viewdidload中呼叫。

為了響應使用者的拖動手勢,給兩個把手(uiimageview)分別新增滑動手勢識別(uipangesturerecognizer)。我們在setupview中繼續新增如下**

-(void)setupview
實現lefthandmove:和righthandmove:方法,處理滑動事件:

-(void)lefthandmove:(uipangesturerecognizer *)panelse if (x< pricebgx )

lefthandimageview.center = cgpointmake(ceilf(x), lefthandimageview.center.y);

[pan settranslation:cgpointzero inview:self.view];

}

-(void)righthandmove:(uipangesturerecognizer *)panelse if (x在lefthandmove:方法中,我們使用translationinview函式,得到在指定的view座標系中的改變值point,將原來的x座標值加上改變的值後,若超出符合要求的刻度範圍,我們要設定其為邊界值,然後再更新把手的位置,否則直接更新即可。righthandmove:同理實現。

嘗試執行專案並拖動把手,現在把手的位置可以水平拖動了,但是uilabel還沒有顯示我們選中的範圍,藍色進度條也沒隨之改變。

float leftvalue;

float rightvalue;

在viewdidload中初始化

- (void)viewdidload
然後在lefthandmove:和righthandmove:中將使用者選中的值分別賦值給leftvalue和rightvalue。

-(void)lefthandmove:(uipangesturerecognizer *)pan
現在,我們寫乙個更新數值和進度條的函式,函式名為updatedata。

-(void)updatedata
我們再一次執行程式,滑動手柄,數值雖然改變了,但並不是我們想要的**數值!!

這是因為螢幕的座標和刻度圖的座標範圍並不一致,因此我們需要將資料處理一下。可能你已經發現,刻度圖中的範圍並不是均勻分布的,而是分成三段:0~25、25~40、40~100。因此我們在處理時需要分段處理。

我們寫乙個將左邊轉換為**的轉換函式:

//座標->**

-(cgfloat)x2price:(cgfloat)x

//5~25

else if (x < pricebgx + 133)

//25~40

else if (x < pricebgx + 163)

//40~100

else if (x < pricebgx + 253)

//100+

else

return price;

}

將lefthandmove:中的leftvalue =  x;修改為如下

-(void)lefthandmove:(uipangesturerecognizer *)pan
同理righthandmove:也做相應處理。重新執行程式,滑動把手,顯示的**數值正是我們所期望的。

我們還要更新藍色進度條,只需修改它的frame即可:

-(void)updatedata
當將右邊的把手一直往左滑動,它將滑到左邊把手的左邊,也就是使用者選擇的區間中,上界值比下界值更小了!這並不是我們期望的結果。我們希望上界至少要比下界大1個單位,所以當使用者滑動右把手到上界比下界小於等於1時,左把手也要跟著滑動,與右把手始終保持1個單位。

我們在righthandmove:函式中新增如下**:

-(void)righthandmove:(uipangesturerecognizer *)pan

}

同理在lefthandmove:函式中新增對應**:

-(void)lefthandmove:(uipangesturerecognizer *)pan

}

注意到函式中用到了方法price2x:,這個函式是將**轉換為對應的x座標,作用於前面用到的x2price:剛好相反。

//**->座標

-(cgfloat)price2x:(cgfloat)price

//5~25

else if (price >= 5 && price < 25)

//25~40

else if (price >= 25 && price <40)

//40~100

else if (price >=40 && price <100)else if(price >= 100)

return x;

}

執行程式,現在已經不能將右把手拖動到左把手的前面的吧~

RCurl汽車之家抓取

junjun 2016年4月20日 參考 library rcurl loading required package bitops install.packages xml library xml library reshape 偽裝報頭 myheader c user agent mozilla...

爬取汽車之家

爬汽車之家新聞 爬取汽車之家新聞 import requests 向汽車之家傳送get請求,獲取到頁面 ret requests.get print ret.text 用bs4解析 from bs4 import beautifulsoup 例項化得到物件,傳入要解析的文字,解析器 html.par...

scrapy獲取汽車之家資料

1 建立scrapy專案 2 找到對應介面 3 建立爬蟲檔案 cd scrapy carhome scrapy carhome spiders scrapy carhome scrapy carhome spiders scrapy genspider car 4 注釋robots協議 注意如果你的...