/**
根據總體偏移比例和相關固定值計算滑塊起點坐標x, 滑塊長度.
@param sliderWidth 滑塊靜止時的長度
@param points 滑塊靜止的站點數,也就是標題數量
@param overallLength 按滑塊從第一靜止站點的左端到最后靜止站點右端的總長度
@param rate 外部輸入滑動的比例
@return poin.x 為滑塊起點坐標x, point.y 為滑塊的長度
*/
- (CGPoint)sliderLocationAndLengthWithSliderWidth:(CGFloat)sliderWidth points:(NSUInteger)points overallLength:(CGFloat)overallLength offsetRate:(CGFloat)rate {
if (rate < 0) {
return CGPointMake(0.0, sliderWidth);
}
if (rate > 1) {
return CGPointMake(overallLength - sliderWidth, sliderWidth);
}
// space 滑塊之間的間隔
CGFloat space = (overallLength - points * sliderWidth) / (points - 1);
// 細分滑動段數量, 每個錨點之間分起始段和抵達段兩段
NSInteger section = (points - 1) * 2;
// 計算總體的滑動比例rate在細分后的哪一段
NSInteger index = 0;
for (int i = 0; i < section; i++) {
CGFloat max = (CGFloat)(i + 1) / section;
index = i;
if (rate < max) {
break;
}
}
// 判斷是起始段還是抵達段
BOOL isStart = (index % 2 == 0);
// 計算總體的滑動比例rate, 在細分段中占該段的比例
CGFloat sectionRate = 1.0 / section;
CGFloat minRate = index * sectionRate;
CGFloat progress = (rate - minRate) / sectionRate;
// 計算起始坐標和對應起始坐標的偏移長度
CGFloat x = 0.0;
CGFloat lenght = 0.0;
if (isStart) {
x = (index / 2) * (sliderWidth + space);
lenght = sliderWidth + (sliderWidth + space) * progress;
}else{
x = (index / 2) * (sliderWidth + space) + (sliderWidth + space) * progress;
lenght = sliderWidth + (sliderWidth + space) * (1 - progress);
}
return CGPointMake(x, lenght);
}
毛毛蟲滑塊
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 一只蝴蝶即使沒有了漂亮翅膀也還是蝴蝶,可是一只毛毛蟲,即使插上幾對翅膀也還是一只不折不扣的毛毛蟲,缺少了蛻變的過程...
- 艾瑞克·卡爾(Eric·Carle),是一位我很喜歡的繪本創(chuàng)作者,其于1929年出生在紐約,是兼具繪畫和寫...