2015-05-22 51 views
-1

現在我正在開發與健身有關的應用程序的自定義控件,下面是我迄今爲止開發的控件圖像。將uitouch拖拽點轉換爲目標選擇的自定義邏輯

enter image description here

紅色視圖可以是拖動豎直只從最內側圓到外圓。

我到目前爲止設法將視圖從最內圈垂直拖到外圈。

這裏就是我想實現的,

每個圓圈代表例如2500個步驟最內圈爲0,則2500,5000至外環15000

用戶可以在500只

所以我停留在如何將紅色視圖的滑動點轉換到步驟

也增加選擇我的目標註意到當我快速滑動時,我得到了當前觸摸點的不規則間隔,因此在低速滑動時快速滑動時的步長增加很低&。

任何幫助指向解決方案,高度讚賞。

這是我的代碼到目前爲止。

Circle Code

+0

你可以使用從最內圈中心拖動視圖的距離來計算步驟 –

+0

@VijayMasiwal你可以看看我的代碼我認爲我接近解決方案但不知道我的錯誤是什麼? –

回答

0

我會用一個覆蓋UIScrollView爲紅拖動部分。並且只允許垂直滾動並將pagingEnabled設置爲NO。並將它的delegate設置爲視圖控制器。

然後,你可以爲每個頁面500step您的自定義分頁通過kCellHeigth設置對應於500steps在圖像的像素數如下:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
{ 
    CGFloat kMaxIndex = 30; //=15000/500 
    CGFloat targetY = scrollView.contentOffset.y + velocity.y * 60.0; 
    CGFloat targetIndex = round(targetY/(kCellHeigth + kCellSpacing)); 
    if (targetIndex < 0) 
     targetIndex = 0; 
    if (targetIndex > kMaxIndex) 
     targetIndex = kMaxIndex; 
    targetContentOffset->y = targetIndex * (kCellHeigth + kCellSpacing); 
} 

- 新的解決方案看你的代碼後 -

我看到對於iPhone5(寬度= 320),相鄰圓圈之間的半徑增量約爲20個點。而這個空間相當於2500步。

So 1 point = 125 steps 由於您想要500步增量,它對應於iPhone5/5s屏幕中的4個點。也許當用戶觸摸結束,你可以嘗試將導航儀捕捉到最近的4點網格:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"%s",__FUNCTION__); 
    UITouch *touch = [touches anyObject]; 
    touchPoint = [touch locationInView:_navView]; 
    CGPoint newCenter = CGPointMake(_navView.center.x, _navView.center.y + (touchPoint.y - touchStart.y)); 
    CGFloat yDelta = newCenter.y - _navMinPoint.y; 
    int yDeltaMultiple = yDelta/4; 
    int newYDelta = yDeltaMultiple * 4; 
    newCenter.y = newYDelta; 
    _navView.center = newCenter; 
    _labelSteps.center = [self setStepsLabelfromNavView]; 
} 

我沒有在Xcode中寫這些所以有可能是拼寫錯誤/錯誤。如果這適用於iPhone 5/5s,那麼我們需要將4 points更改爲變量。

+0

感謝您的回答,但我必須重新構建整件事來測試您的代碼片段,並且必須在今天結束之前將其提供,因此如果您可以使用當前代碼提供一些解決方案,我提供了有問題的代碼請看看它。 –

+0

是的,我意識到你在回答後發佈了代碼。我現在正在看它..它看起來高度定製。 – aytunch