有沒有辦法使用CGAffineTranformMAkeRotation圍繞外部點旋轉UIImage? tnx很多!CGAffineTransformMakeRotation圍繞外部點
回答
這是一個函數,使用相同的格式作爲CoreGraphics CGAffineTransform API格式。
這與其他「RotateAt()」API的工作原理完全相同。
該操作表示等效於以下規範:translate(pt.x,pt.y);旋轉(角度); translate(-pt.x,-pt.y);
CGAffineTransform CGAffineTransformMakeRotationAt(CGFloat angle, CGPoint pt){
const CGFloat fx = pt.x, fy = pt.y, fcos = cos(angle), fsin = sin(angle);
return CGAffineTransformMake(fcos, fsin, -fsin, fcos, fx - fx * fcos + fy * fsin, fy - fx * fsin - fy * fcos);
}
就像CGAffineTransformMakeRotation()
一樣,角度是弧度而不是度數。
我剛剛給了這個鏡頭。喜歡的東西應該給你你正在尋找...
- (void)rotateView:(UIView *)view aroundPoint:(CGPoint)point withAngle:(double)angle{
//save original view center
CGPoint originalCenter = view.center;
//set center of view to center of rotation
[view setCenter:point];
//apply a translation to bring the view back to its original point
view.transform = CGAffineTransformMakeTranslation(originalCenter.x, originalCenter.y);
//multiply the view's existing rotation matrix (the translation) by a rotation and apply it to the view
//thereby making it rotate around the external point
view.transform = CGAffineTransformConcat(view.transform, CGAffineTransformMakeRotation(angle));
}
只是爲了解釋我的推理有點結果......
什麼我們基本上做視圖物理轉向點的旋轉,然後應用翻譯使其看起來像停留在原始點。然後,如果我們將旋轉乘以視圖的新平移,則我們基本上旋轉整個視圖及其座標系,因此看起來就像它在給定點附近旋轉一樣。我希望我解釋得很好。 :|如果沒有,我建議在網上查找轉換矩陣,也許你可以找到更好的解釋他們如何堆積在那裏!
將圖像視圖的圖層的anchorPoint設置爲(0,0)和(1,1)以外的內容,即view.layer.anchorPoint = CGPointMake(2,2)。
如果你記住了兩件事:a)這將完全改變你的視圖的繪製位置,而不僅僅是轉換b)我相信anchorPoint的x和y值是視圖大小的倍數。它們不在主視圖座標系中。 – mjisrawi
我已經用這種方法解決了: 我把UIImage,我想旋轉到另一個視圖。 該視圖是最大的圖像視圖,所以視圖的中心點是uiimage視圖的外部點,所以我旋轉視圖....
- 1. 與圍繞重點
- 2. 圍繞一個點
- 3. 圍繞點旋轉
- 4. Box2D C++圍繞點
- 5. 圍繞原點旋轉點
- 6. 圍繞多個例外
- 7. 圍繞div的環繞錨點
- 8. 圍繞點xna旋轉2D
- 9. 圍繞一個點旋轉
- 10. OpenGl圍繞點轉動
- 11. 圍繞點放置邊框
- 12. 圍繞特定點旋轉(例如,圍繞0,0,0旋轉)
- 13. 圍繞另一點旋轉一個點
- 14. 圍繞另一點旋轉一個點
- 15. AOP圍繞外部庫的重寫方法?
- 16. 排列圍繞中心拋球的2D點比較例外
- 17. 圍繞
- 18. 圍繞不是.anchorPoint的內部點旋轉SkSpriteNode
- 19. 圍繞左下角div圍繞文本?
- 20. 如何圍繞MKAnnotation數組圍繞UIMapView?
- 21. 如何用CSS圍繞DIV圍繞DIV
- 22. 圍繞文字環繞HTML
- 23. 使用swift和spriteKit我怎樣才能圍繞節點外的點旋轉SKSpriteNode?
- 24. CGAffineTransformMakeRotation iOS7
- 25. 的Java:圍繞內部網格佈局
- 26. 圍繞NSString的一部分繪製框
- 27. 圍繞一個點旋轉div
- 28. 圍繞原點旋轉整個SKView
- 29. 圍繞一箇中心點旋轉CGPoint
- 30. 圍繞某個點旋轉html元素
我假設pt是一箇中心? – Andy
爲什麼你不能只做一個'var t = CGAffineTransformMakeTranslation(-pt.x,-pt.y)',然後用't = CGAffineTransformRotate(t,angel)'做旋轉,然後用'var t = CGAffineTransformTranslate(t,pt.x,pt.y)'? – Adam
@亞當這是你必須做的3件事。我的回答是一個呼籲做這三個。非常優化。請重新閱讀我的答案,尤其是代碼前的第三行。 – Andy