2013-09-10 53 views
2

從來沒有真正用iOS開發過,我正在研究可能的標準iOS控件,如文本字段,列表等,並想知道哪些變換可以應用於它們。2D和3D變換可以應用於iOS控件嗎?

這些標準控件是否支持比例縮放,平移和旋轉等2D轉換? 這些標準控件是否也支持包含z軸的縮放,平移和旋轉等3D轉換?

如果問題的答案是肯定的,那麼支持的「級別」是什麼?例如對於文本字段,如果我在3D座標空間中轉換它,我仍然可以輸入文本嗎?

回答

2

是的,很多。 UITextField例如從UIControl繼承UIView繼承。這意味着,你必須通過它的轉換屬性直接訪問視圖的變換屬性:

[myTextField setTransform:CGAffineTransformMake(a, b, c, d, x, y)]; 

或者對3D的支持,您可以訪問視圖的層的變換屬性以將一個CATransform3D:

[myTextField.layer setTransform:CATransform3DRotate(trans, theta, x, y, z)]; 

CATransform3D的定義如下,正如@Xman指出的那樣,您需要使用#import <QuartzCore/QuartzCore.h>導入QuartzCore框架,並在構建階段與它鏈接。

struct CATransform3D 
{ 
    CGFloat m11, m12, m13, m14; 
    CGFloat m21, m22, m23, m24; 
    CGFloat m31, m32, m33, m34; 
    CGFloat m41, m42, m43, m44; 
}; 
typedef struct CATransform3D CATransform3D; 

在這兩種情況下,都可以在應用轉換後與文本字段進行交互。

更多信息可在Apple's documentation找到。

+0

很酷,感謝您的快速和有益的迴應! –

+0

@FelixBembrick當然,如果我的回答有幫助,請不要忘記標記爲正確。 –

+0

好的,只是要清楚,即使在3D座標中變換了文本字段後,仍然可以輸入文本,例如它會出現在立方體的面上? –

1

檢查CATransform3D

CATransform3D yourTransform = CATransform3DIdentity; 
yourTransform.m34 = 1.0/-500; 

//You can rotate the component in any angle around x,y,z axis using following line. 
//Below line will rotate the component in 60 degree around y-axis. 
yourTransform = CATransform3DRotate(yourTransform, DEGREES_TO_RADIANS(60), 0.0f, 1.0f, 0.0f);  //#define DEGREES_TO_RADIANS(d) (d * M_PI/180) 

//You can even translate the component along x,y,z axis 
//Below line will translate component by 50 on y-axis 
yourTransform = CATransform3DTranslate(yourTransform, 0, 50, 0); 

//apply transform to component 
yourComponent.layer.transform = yourTransform; 

不要忘了導入

#import <QuartzCore/QuartzCore.h> 

希望這會幫助你。