1. 获取磁盘总空间大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//磁盘总空间
+
(
CGFloat
)
diskOfAllSizeMBytes
{
CGFloat
size
=
0.0
;
NSError
*error
;
NSDictionary
*dic
=
[
[
NSFileManager
defaultManager
]
attributesOfFileSystemForPath
:NSHomeDirectory
(
)
error
:
&
error
]
;
if
(
error
)
{
#ifdef DEBUG
NSLog
(
@"error: %@"
,
error
.
localizedDescription
)
;
#endif
}
else
{
NSNumber
*number
=
[
dic
objectForKey
:NSFileSystemSize
]
;
size
=
[
number
floatValue
]
/
1024
/
1024
;
}
return
size
;
}
|
2. 获取磁盘可用空间大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//磁盘可用空间
+
(
CGFloat
)
diskOfFreeSizeMBytes
{
CGFloat
size
=
0.0
;
NSError
*error
;
NSDictionary
*dic
=
[
[
NSFileManager
defaultManager
]
attributesOfFileSystemForPath
:NSHomeDirectory
(
)
error
:
&
error
]
;
if
(
error
)
{
#ifdef DEBUG
NSLog
(
@"error: %@"
,
error
.
localizedDescription
)
;
#endif
}
else
{
NSNumber
*number
=
[
dic
objectForKey
:NSFileSystemFreeSize
]
;
size
=
[
number
floatValue
]
/
1024
/
1024
;
}
return
size
;
}
|
3. 获取指定路径下某个文件的大小
1
2
3
4
5
6
|
//获取文件大小
+
(
long
long
)
fileSizeAtPath
:
(
NSString
*
)
filePath
{
NSFileManager
*fileManager
=
[
NSFileManager
defaultManager
]
;
if
(
!
[
fileManager
fileExistsAtPath
:filePath
]
)
return
0
;
return
[
[
fileManager
attributesOfItemAtPath
:filePath
error
:nil
]
fileSize
]
;
}
|
4. 获取文件夹下所有文件的大小
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//获取文件夹下所有文件的大小
+
(
long
long
)
folderSizeAtPath
:
(
NSString
*
)
folderPath
{
NSFileManager
*fileManager
=
[
NSFileManager
defaultManager
]
;
if
(
!
[
fileManager
fileExistsAtPath
:folderPath
]
)
return
0
;
NSEnumerator
*filesEnumerator
=
[
[
fileManager
subpathsAtPath
:folderPath
]
objectEnumerator
]
;
NSString
*fileName
;
long
long
folerSize
=
0
;
while
(
(
fileName
=
[
filesEnumerator
nextObject
]
)
!=
nil
)
{
NSString
*filePath
=
[
folderPath
stringByAppendingPathComponent
:fileName
]
;
folerSize
+=
[
self
fileSizeAtPath
:filePath
]
;
}
return
folerSize
;
}
|
5. 获取字符串(或汉字)首字母
1
2
3
4
5
6
7
8
|
//获取字符串(或汉字)首字母
+
(
NSString
*
)
firstCharacterWithString
:
(
NSString
*
)
string
{
NSMutableString
*str
=
[
NSMutableString
stringWithString
:string
]
;
CFStringTransform
(
(
CFMutableStringRef
)
str
,
NULL
,
kCFStringTransformMandarinLatin
,
NO
)
;
CFStringTransform
(
(
CFMutableStringRef
)
str
,
NULL
,
kCFStringTransformStripDiacritics
,
NO
)
;
NSString
*pingyin
=
[
str
capitalizedString
]
;
return
[
pingyin
substringToIndex
:
1
]
;
}
|
6. 将字符串数组按照元素首字母顺序进行排序分组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
//将字符串数组按照元素首字母顺序进行排序分组
+
(
NSDictionary
*
)
dictionaryOrderByCharacterWithOriginalArray
:
(
NSArray
*
)
array
{
if
(
array
.
count
==
0
)
{
return
nil
;
}
for
(
id
obj
in
array
)
{
if
(
!
[
obj
isKindOfClass
:
[
NSString
class
]
]
)
{
return
nil
;
}
}
UILocalizedIndexedCollation
*indexedCollation
=
[
UILocalizedIndexedCollation
currentCollation
]
;
NSMutableArray
*objects
=
[
NSMutableArray
arrayWithCapacity
:indexedCollation
.
sectionTitles
.
count
]
;
//创建27个分组数组
for
(
int
i
=
0
;
i
<
indexedCollation
.
sectionTitles
.
count
;
i
++
)
{
NSMutableArray
*obj
=
[
NSMutableArray
array
]
;
[
objects
addObject
:obj
]
;
}
NSMutableArray
*keys
=
[
NSMutableArray
arrayWithCapacity
:objects
.
count
]
;
//按字母顺序进行分组
NSInteger
lastIndex
=
-
1
;
for
(
int
i
=
0
;
i
<
array
.
count
;
i
++
)
{
NSInteger
index
=
[
indexedCollation
sectionForObject
:array
[
i
]
collationStringSelector
:
@selector
(
uppercaseString
)
]
;
[
[
objects
objectAtIndex
:index
]
addObject
:array
[
i
]
]
;
lastIndex
=
index
;
}
//去掉空数组
for
(
int
i
=
0
;
i
<
objects
.
count
;
i
++
)
{
NSMutableArray
*obj
=
objects
[
i
]
;
if
(
obj
.
count
==
0
)
{
[
objects
removeObject
:obj
]
;
}
}
//获取索引字母
for
(
NSMutableArray
*obj
in
objects
)
{
NSString
*str
=
obj
[
0
]
;
NSString
*key
=
[
self
firstCharacterWithString
:str
]
;
[
keys
addObject
:key
]
;
}
NSMutableDictionary
*dic
=
[
NSMutableDictionary
dictionary
]
;
[
dic
setObject
:objects
forKey
:keys
]
;
return
dic
;
}
//获取字符串(或汉字)首字母
+
(
NSString
*
)
firstCharacterWithString
:
(
NSString
*
)
string
{
NSMutableString
*str
=
[
NSMutableString
stringWithString
:string
]
;
CFStringTransform
(
(
CFMutableStringRef
)
str
,
NULL
,
kCFStringTransformMandarinLatin
,
NO
)
;
CFStringTransform
(
(
CFMutableStringRef
)
str
,
NULL
,
kCFStringTransformStripDiacritics
,
NO
)
;
NSString
*pingyin
=
[
str
capitalizedString
]
;
return
[
pingyin
substringToIndex
:
1
]
;
}
|
使用如下:
1
2
3
|
NSArray
*arr
=
@
[
@"guangzhou"
,
@"shanghai"
,
@"北京"
,
@"henan"
,
@"hainan"
]
;
NSDictionary
*dic
=
[
Utilities
dictionaryOrderByCharacterWithOriginalArray
:arr
]
;
NSLog
(
@"\n\ndic: %@"
,
dic
)
;
|
输出结果如下:
1
2
3
4
5
6
7
|
//获取当前时间
//format: @"yyyy-MM-dd HH:mm:ss"、@"yyyy年MM月dd日 HH时mm分ss秒"
+
(
NSString
*
)
currentDateWithFormat
:
(
NSString
*
)
format
{
NSDateFormatter
*dateFormatter
=
[
[
NSDateFormatter
alloc
]
init
]
;
[
dateFormatter
setDateFormat
:format
]
;
return
[
dateFormatter
stringFromDate
:
[
NSDate
date
]
]
;
}
|
8. 计算上次日期距离现在多久, 如 xx 小时前、xx 分钟前等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/**
* 计算上次日期距离现在多久
*
* @param lastTime 上次日期(需要和格式对应)
* @param format1 上次日期格式
* @param currentTime 最近日期(需要和格式对应)
* @param format2 最近日期格式
*
* @return xx分钟前、xx小时前、xx天前
*/
+
(
NSString
*
)
timeIntervalFromLastTime
:
(
NSString
*
)
lastTime
lastTimeFormat
:
(
NSString
*
)
format1
ToCurrentTime
:
(
NSString
*
)
currentTime
currentTimeFormat
:
(
NSString
*
)
format2
{
//上次时间
NSDateFormatter
*dateFormatter1
=
[
[
NSDateFormatter
alloc
]
init
]
;
dateFormatter1
.
dateFormat
=
format1
;
NSDate
*lastDate
=
[
dateFormatter1
dateFromString
:lastTime
]
;
//当前时间
NSDateFormatter
*dateFormatter2
=
[
[
NSDateFormatter
alloc
]
init
]
;
dateFormatter2
.
dateFormat
=
format2
;
NSDate
*currentDate
=
[
dateFormatter2
dateFromString
:currentTime
]
;
return
[
Utilities
timeIntervalFromLastTime
:lastDate
ToCurrentTime
:currentDate
]
;
}
+
(
NSString
*
)
timeIntervalFromLastTime
:
(
NSDate
*
)
lastTime
ToCurrentTime
:
(
NSDate
*
)
currentTime
{
NSTimeZone
*timeZone
=
[
NSTimeZone
systemTimeZone
]
;
//上次时间
NSDate
*lastDate
=
[
lastTime
dateByAddingTimeInterval
:
[
timeZone
secondsFromGMTForDate
:lastTime
]
]
;
//当前时间
NSDate
*currentDate
=
[
currentTime
dateByAddingTimeInterval
:
[
timeZone
secondsFromGMTForDate
:currentTime
]
]
;
//时间间隔
NSInteger
intevalTime
=
[
currentDate
timeIntervalSinceReferenceDate
]
-
[
lastDate
timeIntervalSinceReferenceDate
]
;
//秒、分、小时、天、月、年
NSInteger
minutes
=
intevalTime
/
60
;
NSInteger
hours
=
intevalTime
/
60
/
60
;
NSInteger
day
=
intevalTime
/
60
/
60
/
24
;
NSInteger
month
=
intevalTime
/
60
/
60
/
24
/
30
;
NSInteger
yers
=
intevalTime
/
60
/
60
/
24
/
365
;
if
(
minutes
<=
10
)
{
return
@"刚刚"
;
}
else
if
(
minutes
<
60
)
{
return
[
NSString
stringWithFormat
:
@"%ld分钟前"
,
(
long
)
minutes
]
;
}
else
if
(
hours
<
24
)
{
return
[
NSString
stringWithFormat
:
@"%ld小时前"
,
(
long
)
hours
]
;
}
else
if
(
day
<
30
)
{
return
[
NSString
stringWithFormat
:
@"%ld天前"
,
(
long
)
day
]
;
}
else
if
(
month
<
12
)
{
NSDateFormatter
*
df
=
[
[
NSDateFormatter
alloc
]
init
]
;
df
.
dateFormat
=
@"M月d日"
;
NSString
*
time
=
[
df
stringFromDate
:lastDate
]
;
return
time
;
}
else
if
(
yers
>=
1
)
{
NSDateFormatter
*
df
=
[
[
NSDateFormatter
alloc
]
init
]
;
df
.
dateFormat
=
@"yyyy年M月d日"
;
NSString
*
time
=
[
df
stringFromDate
:lastDate
]
;
return
time
;
}
return
@""
;
}
|
使用如下:
1
2
3
4
|
NSLog
(
@"\n\nresult: %@"
,
[
Utilities
timeIntervalFromLastTime
:
@"2015年12月8日 15:50"
lastTimeFormat
:
@"yyyy年MM月dd日 HH:mm"
ToCurrentTime
:
@"2015/12/08 16:12"
currentTimeFormat
:
@"yyyy/MM/dd HH:mm"
]
)
;
|
输出结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//判断手机号码格式是否正确
+
(
BOOL
)
valiMobile
:
(
NSString
*
)
mobile
{
mobile
=
[
mobile
stringByReplacingOccurrencesOfString
:
@" "
withString
:
@""
]
;
if
(
mobile
.
length
!=
11
)
{
return
NO
;
}
else
{
/**
* 移动号段正则表达式
*/
NSString
*CM_NUM
=
@"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$"
;
/**
* 联通号段正则表达式
*/
NSString
*CU_NUM
=
@"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$"
;
/**
* 电信号段正则表达式
*/
NSString
*CT_NUM
=
@"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$"
;
NSPredicate
*pred1
=
[
NSPredicate
predicateWithFormat
:
@"SELF MATCHES %@"
,
CM_NUM
]
;
BOOL
isMatch1
=
[
pred1
evaluateWithObject
:mobile
]
;
NSPredicate
*pred2
=
[
NSPredicate
predicateWithFormat
:
@"SELF MATCHES %@"
,
CU_NUM
]
;
BOOL
isMatch2
=
[
pred2
evaluateWithObject
:mobile
]
;
NSPredicate
*pred3
=
[
NSPredicate
predicateWithFormat
:
@"SELF MATCHES %@"
,
CT_NUM
]
;
BOOL
isMatch3
=
[
pred3
evaluateWithObject
:mobile
]
;
if
(
isMatch1
||
isMatch2
||
isMatch3
)
{
return
YES
;
}
else
{
return
NO
;
}
}
}
|
10. 判断邮箱格式是否正确
1
2
3
4
5
6
|
//利用正则表达式验证
+
(
BOOL
)
isAvailableEmail
:
(
NSString
*
)
email
{
NSString
*emailRegex
=
@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
;
NSPredicate
*emailTest
=
[
NSPredicate
predicateWithFormat
:
@"SELF MATCHES %@"
,
emailRegex
]
;
return
[
emailTest
evaluateWithObject
:email
]
;
}
|
11. 将十六进制颜色转换为 UIColor 对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//将十六进制颜色转换为 UIColor 对象
+
(
UIColor
*
)
colorWithHexString
:
(
NSString
*
)
color
{
NSString
*cString
=
[
[
color
stringByTrimmingCharactersInSet
:
[
NSCharacterSet
whitespaceAndNewlineCharacterSet
]
]
uppercaseString
]
;
// String should be 6 or 8 characters
if
(
[
cString
length
]
<
6
)
{
return
[
UIColor
clearColor
]
;
}
// strip "0X" or "#" if it appears
if
(
[
cString
hasPrefix
:
@"0X"
]
)
cString
=
[
cString
substringFromIndex
:
2
]
;
if
(
[
cString
hasPrefix
:
@"#"
]
)
cString
=
[
cString
substringFromIndex
:
1
]
;
if
(
[
cString
length
]
!=
6
)
return
[
UIColor
clearColor
]
;
// Separate into r, g, b substrings
NSRange
range
;
range
.
location
=
0
;
range
.
length
=
2
;
//r
NSString
*rString
=
[
cString
substringWithRange
:range
]
;
//g
range
.
location
=
2
;
NSString
*gString
=
[
cString
substringWithRange
:range
]
;
//b
range
.
location
=
4
;
NSString
*bString
=
[
cString
substringWithRange
:range
]
;
// Scan values
unsigned
int
r
,
g
,
b
;
[
[
NSScanner
scannerWithString
:rString
]
scanHexInt
:
&
r
]
;
[
[
NSScanner
scannerWithString
:gString
]
scanHexInt
:
&
g
]
;
[
[
NSScanner
scannerWithString
:bString
]
scanHexInt
:
&
b
]
;
return
[
UIColor
colorWithRed
:
(
(
float
)
r
/
255.0f
)
green
:
(
(
float
)
g
/
255.0f
)
blue
:
(
(
float
)
b
/
255.0f
)
alpha
:
1.0f
]
;
}
|
12. 对图片进行滤镜处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#pragma mark - 对图片进行滤镜处理
// 怀旧 --> CIPhotoEffectInstant 单色 --> CIPhotoEffectMono
// 黑白 --> CIPhotoEffectNoir 褪色 --> CIPhotoEffectFade
// 色调 --> CIPhotoEffectTonal 冲印 --> CIPhotoEffectProcess
// 岁月 --> CIPhotoEffectTransfer 铬黄 --> CIPhotoEffectChrome
// CILinearToSRGBToneCurve, CISRGBToneCurveToLinear, CIGaussianBlur, CIBoxBlur, CIDiscBlur, CISepiaTone, CIDepthOfField
+
(
UIImage
*
)
filterWithOriginalImage
:
(
UIImage
*
)
image
filterName
:
(
NSString
*
)
name
{
CIContext
*context
=
[
CIContext
contextWithOptions
:nil
]
;
CIImage
*inputImage
=
[
[
CIImage
alloc
]
initWithImage
:image
]
;
CIFilter
*filter
=
[
CIFilter
filterWithName
:name
]
;
[
filter
setValue
:inputImage
forKey
:kCIInputImageKey
]
;
CIImage
*result
=
[
filter
valueForKey
:kCIOutputImageKey
]
;
CGImageRef
cgImage
=
[
context
createCGImage
:result
fromRect
:
[
result
extent
]
]
;
UIImage
*resultImage
=
[
UIImage
imageWithCGImage
:cgImage
]
;
CGImageRelease
(
cgImage
)
;
return
resultImage
;
}
|
13. 对图片进行模糊处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#pragma mark - 对图片进行模糊处理
// CIGaussianBlur ---> 高斯模糊
// CIBoxBlur ---> 均值模糊(Available in iOS 9.0 and later)
// CIDiscBlur ---> 环形卷积模糊(Available in iOS 9.0 and later)
// CIMedianFilter ---> 中值模糊, 用于消除图像噪点, 无需设置radius(Available in iOS 9.0 and later)
// CIMotionBlur ---> 运动模糊, 用于模拟相机移动拍摄时的扫尾效果(Available in iOS 9.0 and later)
+
(
UIImage
*
)
blurWithOriginalImage
:
(
UIImage
*
)
image
blurName
:
(
NSString
*
)
name
radius
:
(
NSInteger
)
radius
{
CIContext
*context
=
[
CIContext
contextWithOptions
:nil
]
;
CIImage
*inputImage
=
[
[
CIImage
alloc
]
initWithImage
:image
]
;
CIFilter
*filter
;
if
(
name
.
length
!=
0
)
{
filter
=
[
CIFilter
filterWithName
:name
]
;
[
filter
setValue
:inputImage
forKey
:kCIInputImageKey
]
;
if
(
!
[
name
isEqualToString
:
@"CIMedianFilter"
]
)
{
[
filter
setValue
:
@
(
radius
)
forKey
:
@"inputRadius"
]
;
}
CIImage
*result
=
[
filter
valueForKey
:kCIOutputImageKey
]
;
CGImageRef
cgImage
=
[
context
createCGImage
:result
fromRect
:
[
result
extent
]
]
;
UIImage
*resultImage
=
[
UIImage
imageWithCGImage
:cgImage
]
;
CGImageRelease
(
cgImage
)
;
return
resultImage
;
}
else
{
return
nil
;
}
}
|
14. 调整图片饱和度、亮度、对比度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/**
* 调整图片饱和度, 亮度, 对比度
*
* @param image 目标图片
* @param saturation 饱和度
* @param brightness 亮度: -1.0 ~ 1.0
* @param contrast 对比度
*
*/
+
(
UIImage
*
)
colorControlsWithOriginalImage
:
(
UIImage
*
)
image
saturation
:
(
CGFloat
)
saturation
brightness
:
(
CGFloat
)
brightness
contrast
:
(
CGFloat
)
contrast
{
CIContext
*context
=
[
CIContext
contextWithOptions
:nil
]
;
CIImage
*inputImage
=
[
[
CIImage
alloc
]
initWithImage
:image
]
;
CIFilter
*filter
=
[
CIFilter
filterWithName
:
@"CIColorControls"
]
;
[
filter
setValue
:inputImage
forKey
:kCIInputImageKey
]
;
[
filter
setValue
:
@
(
saturation
)
forKey
:
@"inputSaturation"
]
;
[
filter
setValue
:
@
(
brightness
)
forKey
:
@"inputBrightness"
]
;
[
filter
setValue
:
@
(
contrast
)
forKey
:
@"inputContrast"
]
;
CIImage
*result
=
[
filter
valueForKey
:kCIOutputImageKey
]
;
CGImageRef
cgImage
=
[
context
createCGImage
:result
fromRect
:
[
result
extent
]
]
;
UIImage
*resultImage
=
[
UIImage
imageWithCGImage
:cgImage
]
;
CGImageRelease
(
cgImage
)
;
return
resultImage
;
}
|
15. 创建一张实时模糊效果 View (毛玻璃效果)
1
2
3
4
5
6
7
|
//Avilable in iOS 8.0 and later
+
(
UIVisualEffectView
*
)
effectViewWithFrame
:
(
CGRect
)
frame
{
UIBlurEffect
*effect
=
[
UIBlurEffect
effectWithStyle
:UIBlurEffectStyleLight
]
;
UIVisualEffectView
*effectView
=
[
[
UIVisualEffectView
alloc
]
initWithEffect
:effect
]
;
effectView
.
frame
=
frame
;
return
effectView
;
}
|
16. 全屏截图
1
2
3
4
5
6
7
8
9
|
//全屏截图
+
(
UIImage
*
)
shotScreen
{
UIWindow
*window
=
[
UIApplication
sharedApplication
]
.
keyWindow
;
UIGraphicsBeginImageContext
(
window
.
bounds
.
size
)
;
[
window
.
layer
renderInContext
:UIGraphicsGetCurrentContext
(
)
]
;
UIImage
*image
=
UIGraphicsGetImageFromCurrentImageContext
(
)
;
UIGraphicsEndImageContext
(
)
;
return
image
;
}
|
17. 截取一张 view 生成图片
1
2
3
4
5
6
7
8
|
//截取view生成一张图片
+
(
UIImage
*
)
shotWithView
:
(
UIView
*
)
view
{
UIGraphicsBeginImageContext
(
view
.
bounds
.
size
)
;
[
view
.
layer
renderInContext
:UIGraphicsGetCurrentContext
(
)
]
;
UIImage
*image
=
UIGraphicsGetImageFromCurrentImageContext
(
)
;
UIGraphicsEndImageContext
(
)
;
return
image
;
}
|
18. 截取view中某个区域生成一张图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//截取view中某个区域生成一张图片
+
(
UIImage
*
)
shotWithView
:
(
UIView
*
)
view
scope
:
(
CGRect
)
scope
{
CGImageRef
imageRef
=
CGImageCreateWithImageInRect
(
[
self
shotWithView
:view
]
.
CGImage
,
scope
)
;
UIGraphicsBeginImageContext
(
scope
.
size
)
;
CGContextRef
context
=
UIGraphicsGetCurrentContext
(
)
;
CGRect
rect
=
CGRectMake
(
0
,
0
,
scope
.
size
.
width
,
scope
.
size
.
height
)
;
CGContextTranslateCTM
(
context
,
0
,
rect
.
size
.
height
)
;
//下移
CGContextScaleCTM
(
context
,
1.0f
,
-
1.0f
)
;
//上翻
CGContextDrawImage
(
context
,
rect
,
imageRef
)
;
UIImage
*image
=
UIGraphicsGetImageFromCurrentImageContext
(
)
;
UIGraphicsEndImageContext
(
)
;
CGImageRelease
(
imageRef
)
;
CGContextRelease
(
context
)
;
return
image
;
}
|
19. 压缩图片到指定尺寸大小
1
2
3
4
5
6
7
8
|
//压缩图片到指定尺寸大小
+
(
UIImage
*
)
compressOriginalImage
:
(
UIImage
*
)
image
toSize
:
(
CGSize
)
size
{
UIImage
*resultImage
=
image
;
UIGraphicsBeginImageContext
(
size
)
;
[
resultImage
drawInRect
:CGRectMake
(
0
,
0
,
size
.
width
,
size
.
height
)
]
;
UIGraphicsEndImageContext
(
)
;
return
resultImage
;
}
|
20. 压缩图片到指定文件大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//压缩图片到指定文件大小
+
(
NSData
*
)
compressOriginalImage
:
(
UIImage
*
)
image
toMaxDataSizeKBytes
:
(
CGFloat
)
size
{
NSData
*data
=
UIImageJPEGRepresentation
(
image
,
1.0
)
;
CGFloat
dataKBytes
=
data
.
length
/
1000.0
;
CGFloat
maxQuality
=
0.9f
;
CGFloat
lastData
=
dataKBytes
;
while
(
dataKBytes
>
size
&&
maxQuality
>
0.01f
)
{
maxQuality
=
maxQuality
-
0.01f
;
data
=
UIImageJPEGRepresentation
(
image
,
maxQuality
)
;
dataKBytes
=
data
.
length
/
1000.0
;
if
(
lastData
==
dataKBytes
)
{
break
;
}
else
{
lastData
=
dataKBytes
;
}
}
return
data
;
}
|
需要先引入下头文件:
1
2
|
#import <ifaddrs.h>
#import <arpa/inet.h>
|
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//获取设备 IP 地址
+
(
NSString
*
)
getIPAddress
{
NSString
*address
=
@"error"
;
struct
ifaddrs
*interfaces
=
NULL
;
struct
ifaddrs
*temp_addr
=
NULL
;
int
success
=
0
;
success
=
getifaddrs
(
&
interfaces
)
;
if
(
success
==
0
)
{
temp_addr
=
interfaces
;
while
(
temp_addr
!=
NULL
)
{
if
(
temp_addr
->
ifa_addr
->
sa_family
==
AF_INET
)
{
if
(
[
[
NSString
stringWithUTF8String
:temp_addr
->
ifa_name
]
isEqualToString
:
@"en0"
]
)
{
address
=
[
NSString
stringWithUTF8String
:inet_ntoa
(
(
(
struct
sockaddr_in
*
)
temp_addr
->
ifa_addr
)
->
sin_addr
)
]
;
}
}
temp_addr
=
temp_addr
->
ifa_next
;
}
}
freeifaddrs
(
interfaces
)
;
return
address
;
}
|
22. 判断字符串中是否含有空格
1
2
3
4
5
6
7
8
|
+
(
BOOL
)
isHaveSpaceInString
:
(
NSString
*
)
string
{
NSRange
_range
=
[
string
rangeOfString
:
@" "
]
;
if
(
_range
.
location
!=
NSNotFound
)
{
return
YES
;
}
else
{
return
NO
;
}
}
|
23. 判断字符串中是否含有某个字符串
1
2
3
4
5
6
7
8
|
+
(
BOOL
)
isHaveString
:
(
NSString
*
)
string1
InString
:
(
NSString
*
)
string2
{
NSRange
_range
=
[
string2
rangeOfString
:string1
]
;
if
(
_range
.
location
!=
NSNotFound
)
{
return
YES
;
}
else
{
return
NO
;
}
}
|
24. 判断字符串中是否含有中文
1
2
3
4
5
6
7
8
9
|
+
(
BOOL
)
isHaveChineseInString
:
(
NSString
*
)
string
{
for
(
NSInteger
i
=
0
;
i
<
[
string
length
]
;
i
++
)
{
int
a
=
[
string
characterAtIndex
:i
]
;
if
(
a
>
0x4e00
&&
a
<
0x9fff
)
{
return
YES
;
}
}
return
NO
;
}
|
25. 判断字符串是否全部为数字
1
2
3
4
5
6
7
8
9
10
|
+
(
BOOL
)
isAllNum
:
(
NSString
*
)
string
{
unichar
c
;
for
(
int
i
=
0
;
i
<
string
.
length
;
i
++
)
{
c
=
[
string
characterAtIndex
:i
]
;
if
(
!
isdigit
(
c
)
)
{
return
NO
;
}
}
return
YES
;
}
|
26. 绘制虚线
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/*
** lineFrame: 虚线的 frame
** length: 虚线中短线的宽度
** spacing: 虚线中短线之间的间距
** color: 虚线中短线的颜色
*/
+
(
UIView
*
)
createDashedLineWithFrame
:
(
CGRect
)
lineFrame
lineLength
:
(
int
)
length
lineSpacing
:
(
int
)
spacing
lineColor
:
(
UIColor
*
)
color
{
UIView
*dashedLine
=
[
[
UIView
alloc
]
initWithFrame
:lineFrame
]
;
dashedLine
.
backgroundColor
=
[
UIColor
clearColor
]
;
CAShapeLayer
*shapeLayer
=
[
CAShapeLayer
layer
]
;
[
shapeLayer
setBounds
:dashedLine
.
bounds
]
;
[
shapeLayer
setPosition
:CGPointMake
(
CGRectGetWidth
(
dashedLine
.
frame
)
/
2
,
CGRectGetHeight
(
dashedLine
.
frame
)
)
]
;
[
shapeLayer
setFillColor
:
[
UIColor
clearColor
]
.
CGColor
]
;
[
shapeLayer
setStrokeColor
:color
.
CGColor
]
;
[
shapeLayer
setLineWidth
:CGRectGetHeight
(
dashedLine
.
frame
)
]
;
[
shapeLayer
setLineJoin
:kCALineJoinRound
]
;
[
shapeLayer
setLineDashPattern
:
[
NSArray
arrayWithObjects
:
[
NSNumber
numberWithInt
:length
]
,
[
NSNumber
numberWithInt
:spacing
]
,
nil
]
]
;
CGMutablePathRef
path
=
CGPathCreateMutable
(
)
;
CGPathMoveToPoint
(
path
,
NULL
,
0
,
0
)
;
CGPathAddLineToPoint
(
path
,
NULL
,
CGRectGetWidth
(
dashedLine
.
frame
)
,
0
)
;
[
shapeLayer
setPath
:path
]
;
CGPathRelease
(
path
)
;
[
dashedLine
.
layer
addSublayer
:shapeLayer
]
;
return
dashedLine
;
}
|