我有UIView,我必須在圓形路徑中移動它。UIView在圓形路徑中移動(不是動畫)
-4
A
回答
3
簡單。將UIImageView添加到UIView的子類,該子類具有圖像的屬性,以便您可以在代碼中移動它。實現touchesBegan:... touchesMoved:...和touchesEnded:...將圖像移動到圓上適當的點。這裏有一些簡單的數學:
編輯:添加了一些評論,並修復了象限錯誤。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
CGPoint viewCenter = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
CGPoint imageOrigin = self.imageOnCircle.frame.origin;
CGSize imageSize = self.imageOnCircle.frame.size;
CGPoint imageCenter = CGPointMake(imageOrigin.x + imageSize.width/2,
imageOrigin.y + imageSize.height/2);
CGFloat xDist = imageCenter.x - viewCenter.x;
CGFloat yDist = imageCenter.y - viewCenter.y;
CGFloat radius = sqrt(xDist*xDist + yDist*yDist);
CGPoint touchPoint = [[touches anyObject] locationInView:self];
CGFloat touchXDist = touchPoint.x - viewCenter.x;
CGFloat touchYDist = touchPoint.y - viewCenter.y;
// angles in the view coordinates are measured from the positive x axis
// positive value means clockwise rotation
// -π/2 is vertically upward (towards the status bar)
// π/2 is vertically downward (towards the home button)
CGFloat newAngle = atanf(touchYDist/touchXDist);
// arctan takes a value between -π/2 and π/2
CGFloat newXDist = radius * cosf(newAngle);
// cos has a value between -1 and 1
// since the angle is between -π/2 and π/2, newXDist will always be positive.
if (touchXDist < 0)
newXDist *= -1;
CGFloat newYDist = radius * sinf(newAngle);
// sin has a value between -1 and 1
// since the angle is between -π/2 and π/2, newYDist can attain all its values.
// however, the sign will be flipped when x is negative.
if (touchXDist < 0)
newYDist *= -1;
CGPoint newCenter = CGPointMake(viewCenter.x + newXDist,
viewCenter.y + newYDist);
CGPoint newOrigin = CGPointMake(newCenter.x - self.imageOnCircle.frame.size.width/2,
newCenter.y - self.imageOnCircle.frame.size.height/2);
self.imageOnCircle.frame = CGRectMake(newOrigin.x,
newOrigin.y,
self.imageOnCircle.frame.size.width,
self.imageOnCircle.frame.size.height);
}
此外,您可能想添加一個最大/最小角度,以運動限制一方或另一方...
相關問題
- 1. 在圓形路徑中移動uiview
- 2. 在圓形路徑中移動JLabel
- 3. 動畫效果GMSMarker圓形路徑
- 4. 在圓形路徑上移動畫布圖像
- 5. CGAffineTransformMakeScale圓形UIView動畫爲正方形
- 6. 在滾動條上沿圓形路徑移動div
- 7. 圈的UIView動畫保持圓形狀
- 8. 在圓形路徑中如何進行動畫uibuttons(目標C)
- 9. 在正弦波路徑上動畫UIView
- 10. Java:在圓形路徑中移動標籤
- 11. 如何使對象在圓形路徑中移動?
- 12. 如何使用jquery在圓形路徑中移動圖像?
- 13. Cocos2d在路徑上移動動畫
- 14. 圓形動畫
- 15. 圓形動畫
- 16. 圓形動畫
- 17. 拖動在圓形內移動圖像(圓形移動)
- 18. 在圓形路徑上拖動一個畫布元素
- 19. 沿路徑移動形狀?
- 20. SVG - 沿着路徑的動畫矩形;矩形中心總是在路徑上
- 21. javafx鼠標在圓形路徑上移動
- 22. 在圓形路徑上移動一個點
- 23. 動畫svg圖像:得到的路徑動畫,但不是橢圓
- 24. CAShapeLayer路徑動畫 - 縮小圓圈
- 25. Paper.js動畫上點擊路徑移動
- 26. CAKeyframeanimation沿着路徑移動UIView
- 27. 沿着D3路徑移動一個圓圈以不同的速度動畫
- 28. 統一5移動行星圓形或橢圓形的路徑(軌道)
- 29. 移動路徑上的對象(圓圈)
- 30. UIView動畫不會移動視圖
好知道... – 2013-04-27 18:04:30
OK,現在你已經告訴我們想要做什麼,請更新您的問題以提出實際問題。你試過什麼了?你到底需要什麼幫助?請記住,你需要問一個具體的編程問題。 – rmaddy 2013-04-27 18:25:52
...這個問題對我來說似乎沒問題... – samson 2013-04-27 19:24:13