從來沒有真正用iOS開發過,我正在研究可能的標準iOS控件,如文本字段,列表等,並想知道哪些變換可以應用於它們。2D和3D變換可以應用於iOS控件嗎?
這些標準控件是否支持比例縮放,平移和旋轉等2D轉換? 這些標準控件是否也支持包含z軸的縮放,平移和旋轉等3D轉換?
如果問題的答案是肯定的,那麼支持的「級別」是什麼?例如對於文本字段,如果我在3D座標空間中轉換它,我仍然可以輸入文本嗎?
從來沒有真正用iOS開發過,我正在研究可能的標準iOS控件,如文本字段,列表等,並想知道哪些變換可以應用於它們。2D和3D變換可以應用於iOS控件嗎?
這些標準控件是否支持比例縮放,平移和旋轉等2D轉換? 這些標準控件是否也支持包含z軸的縮放,平移和旋轉等3D轉換?
如果問題的答案是肯定的,那麼支持的「級別」是什麼?例如對於文本字段,如果我在3D座標空間中轉換它,我仍然可以輸入文本嗎?
是的,很多。 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找到。
檢查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>
希望這會幫助你。
很酷,感謝您的快速和有益的迴應! –
@FelixBembrick當然,如果我的回答有幫助,請不要忘記標記爲正確。 –
好的,只是要清楚,即使在3D座標中變換了文本字段後,仍然可以輸入文本,例如它會出現在立方體的面上? –