, CGAffineTranformMAkeRotation kullanarak UIImage'ı harici nokta etrafında döndürmenin bir yolu var mı? Çok fazla tnx!CGAffineTransformMakeTerminal noktanın etrafında dön
cevap
Burada CoreGraphics CGAffineTransform ile aynı biçimi kullanan bir işlev var. API formatı.
Bu, diğer "RotateAt()" API'lerinin nasıl çalışması gerektiği konusunda tam olarak çalışır. İşlem, aşağıdaki spesifikasyonun eşdeğerini temsil eder: tercüme (pt.x, pt.y); (Açı) döndürme; tercüme et (-pt.x, -pt.y); Sadece CGAffineTransformMakeRotation()
olduğu gibi
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);
}
, açı radyan değil derece içindedir.
Sadece bir şans verdim. Böyle bir şey size için ...
- (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));
}
Sadece seni biraz akıl yürütme açıklamaya aradığınız sonuca ... vermelidir
Ne temelde fiziksel noktaya görünümü kayıyor yapıyoruz Rotasyon, sonra orijinal noktada kaldı gibi görünmesi için bir çeviri uygulanıyor. Daha sonra, bir rotasyonu görünümün yeni çevirisi ile çarparak çoğaltırsak, esasen tüm görünümü ve koordinat sistemini döndürürüz, böylece belirli nokta etrafında dönüyor gibi görünür. Umarım bunu iyi açıklardım. : | Eğer değilse, dönüşüm matrislerini online olarak incelemeyi öneririm belki de orada nasıl yığdıkları ile ilgili daha iyi açıklamalar bulabilirsiniz!
Görüntü görünümünün katmanın anchorPoint'ini (0,0) ve (1,1) dışındaki bir şeye, yani view.layer.anchorPoint = CGPointMake (2, 2) konumuna ayarlayın.
Eğer bununla devam ederseniz, iki şeyi hatırlayın: a) görüşünüzün çizildiği yer tamamen değişecektir, sadece dönüşüm değil b) anchorPoint'in x ve y değerleri görünüm boyutunun katlarıdır. Ana görüş koordinat sisteminde değiller. – mjisrawi
Bu şekilde çözdüm: Başka bir görünüme dönmek istediğim UIImage'ı yerleştirdim. Görünüm, görünümün orta noktası görünümün merkez noktasının uiimage görünümünün dış noktası olduğunu, bu yüzden görünümü döndürüyorum ....
- 1. Belirli bir noktanın etrafında graphics2d döndürün
- 2. Bir noktanın etrafında bir yarıçap R çizimi
- 3. OpenCV Python görüntüyü belirli bir noktanın etrafında X derece döndürür
- 4. etrafında
- 5. Etiketler çevre etrafında nasıl konumlandırılır?
- 6. Bir noktanın enlemi nasıl hesaplanır?
- 7. Tuval bağlamında son noktanın koordinatlarını alma
- 8. Bir yöntem bildiriminde üç noktanın anlamı nedir?
- 9. Bezier eğrisinde belirli bir noktanın açısı?
- 10. Perl'deki bu open() kullanımındaki noktanın anlamı nedir?
- 11. Yönlendirmeli sayfaya geri dön
- 12. Geri Dön ve javascript
- 13. Getdate() - EST'ye dön
- 14. vs karşılık listesine dön
- 15. Git Çalışmıyor Geri Dön
- 16. Açısal HTTP Döngüye dön
- 17. Sharepoint PDF raporuna dön
- 18. JSod, yesod işleyicisinden dön
- 19. php sonuçları geri dön
- 20. En başa dön $ undefined
- 21. alt şablondan mustache.js'ye dön
- 22. Neden dön (0 * ap ++)?
- 23. Sayfanın başına dön
- 24. Dönüş Anonim İşlevden dön
- 25. Transcompile jQuery JavaScript'e dön
- 26. Göller Etrafında Pürüzsüzleştirici Araziler
- 27. Dikdörtgeni merkezin etrafında döndürün
- 28. Blender: Sphere etrafında gezinme
- 29. Taşı ImageView etrafında RelativeLayout
- 30. UITableView yük hücreleri tersine dön
Ben pt bir merkez olduğunu varsayalım? – Andy
Neden sadece bir "var t = CGAffineTransformMakeTranslation (-pt.x, -pt.y)' yi yapamıyorsunuz ve daha sonra "t = CGAffineTransformRotate (t, angel)" ile döndürme yapamıyorsunuz ve daha sonra "var t" ile geri çeviri yapmıyoruz = CGAffineTransformTranslate (t, pt.x, pt.y) '? – Adam
@Adam Yapmanız gereken 3 şey var. Cevabım her üçü de yapacak bir çağrı. Son derece optimize edilmiş. Lütfen cevabımı, özellikle koddan önceki 3. satırı tekrar oku. – Andy