fuz*_*oat 45 iphone cocoa-touch objective-c
这是我上一期的问题.我正在使用beginAnimations:context:设置动画块来动画一些UITextLabels.但是我在文档中注意到:"在iOS 4.0及更高版本中不鼓励使用此方法.您应该使用基于块的动画方法."
我的问题是我很想使用animateWithDuration:动画:(在iOS 4.0及更高版本中可用)但不想排除使用iOS 3.0的人.有没有办法在运行时检查设备的iOS版本,以便我可以决定使用哪个语句?
Art*_*sev 59
对于将来需要帮助的任何人来说,更简单的解决方案:
NSArray *versionCompatibility = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ( 5 == [[versionCompatibility objectAtIndex:0] intValue] ) { /// iOS5 is installed
// Put iOS-5 code here
} else { /// iOS4 is installed
// Put iOS-4 code here
}
Run Code Online (Sandbox Code Playgroud)
Vla*_*mir 51
在许多情况下,您不需要直接检查iOS版本,而是可以检查运行时是否存在特定方法.
在您的情况下,您可以执行以下操作:
if ([[UIView class] respondsToSelector:@selector(animateWithDuration:animations:)]){
// animate using blocks
}
else {
// animate the "old way"
}
Run Code Online (Sandbox Code Playgroud)
Krz*_*cki 19
符合系统定义中指定的版本
//#定义__IPHONE_2_0 20000
//#定义__IPHONE_2_1 20100
//#定义__IPHONE_2_2 20200
//#定义__IPHONE_3_0 30000
//#定义__IPHONE_3_1 30100
//#定义__IPHONE_3_2 30200
//#定义__IPHONE_4_0 40000
你可以写这样的功能(你应该把这个版本存储在某个地方而不是每次都计算它:
+ (NSInteger) getSystemVersionAsAnInteger{
int index = 0;
NSInteger version = 0;
NSArray* digits = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
NSEnumerator* enumer = [digits objectEnumerator];
NSString* number;
while (number = [enumer nextObject]) {
if (index>2) {
break;
}
NSInteger multipler = powf(100, 2-index);
version += [number intValue]*multipler;
index++;
}
return version;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用如下:
if([Toolbox getSystemVersionAsAnInteger] >= __IPHONE_4_0)
{
//blocks
} else
{
//oldstyle
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用Foundation框架的版本来确定当前的系统版本.
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1){
//for earlier versions
} else {
//for iOS 7
}
Run Code Online (Sandbox Code Playgroud)
这里的大多数解决方案都是如此矫枉过正.你需要做的就是[[UIDevice currentDevice].systemVersion intValue].这会自动删除小数,因此无需拆分字符串.
所以你可以检查它:
if ([[UIDevice currentDevice].systemVersion intValue] >= 8) {
// iOS 8.0 and above
} else {
// Anything less than iOS 8.0
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下代码定义宏:
#define IOS_VERSION [[UIDevice currentDevice].systemVersion intValue];
Run Code Online (Sandbox Code Playgroud)
甚至包括你的支票:
#define IOS_8PLUS ([[UIDevice currentDevice].systemVersion intValue] >= 8)
Run Code Online (Sandbox Code Playgroud)
那你只需要做:
if (IOS_8PLUS) {
// iOS 8.0 and above
} else {
// Anything less than iOS 8.0
}
Run Code Online (Sandbox Code Playgroud)
Xcode 7添加了available语法,使它相对更简单:
迅速:
if #available(iOS 9, *) {
// iOS 9 only code
}
else {
// Fallback on earlier versions
}
Run Code Online (Sandbox Code Playgroud)
Xcode 9还将此语法添加到了Objective-C
目标C:
if (@available(iOS 9.0, *)) {
// iOS 9 only code
} else {
// Fallback on earlier versions
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36974 次 |
| 最近记录: |