NSUserDefaults+Utils.m 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // NSUserDefaults+Utils.m
  3. // ComPDFKit_Tools
  4. //
  5. // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. #import "NSUserDefaults+Utils.h"
  13. @implementation NSUserDefaults (Utils)
  14. - (UIColor *)PDFListViewColorForKey:(NSString *)key {
  15. id colorString = [self objectForKey:key];
  16. UIColor *color;
  17. if ([colorString isKindOfClass:[NSData class]]) {
  18. NSData *data = (NSData *)colorString;
  19. color = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  20. } else {
  21. color = [NSUserDefaults colorWithHexString:colorString];
  22. }
  23. return color;
  24. }
  25. - (void)setPDFListViewColor:(UIColor *)color forKey:(NSString *)key {
  26. NSString *colorString = [NSUserDefaults hexStringWithAlphaColor:color];
  27. [self setObject:colorString forKey:key];
  28. [self synchronize];
  29. }
  30. + (NSString *)hexStringWithAlphaColor:(UIColor *)color {
  31. NSString *colorStr = [NSUserDefaults hexStringWithColor:color];
  32. CGFloat a = 1.;
  33. CGFloat r,g,b;
  34. [color getRed:&r green:&g blue:&b alpha:&a];
  35. NSString *alphaStr = [NSUserDefaults getHexByDecimal:a*255];
  36. if (alphaStr.length < 2) {
  37. alphaStr = [@"0" stringByAppendingString:alphaStr];
  38. }
  39. return [colorStr stringByAppendingString:alphaStr];
  40. }
  41. + (NSString *)hexStringWithColor:(UIColor *)color {
  42. if (!color) {
  43. return nil;
  44. }
  45. CGFloat r,g,b,a;
  46. [color getRed:&r green:&g blue:&b alpha:&a];
  47. return [NSString stringWithFormat:@"#%@%@%@",[NSUserDefaults colorStringWithValue:r],[NSUserDefaults colorStringWithValue:g],[NSUserDefaults colorStringWithValue:b]];
  48. }
  49. + (NSString *)colorStringWithValue:(CGFloat )value {
  50. NSString *str = [NSUserDefaults getHexByDecimal:(NSInteger)(value*255)];
  51. if (str.length < 2) {
  52. return [NSString stringWithFormat:@"0%@",str];
  53. }
  54. return str;
  55. }
  56. + (NSString *)getHexByDecimal:(NSInteger)decimal {
  57. NSString *hex =@"";
  58. NSString *letter;
  59. NSInteger number;
  60. for (int i = 0; i<9; i++) {
  61. number = decimal % 16;
  62. decimal = decimal / 16;
  63. switch (number) {
  64. case 10:
  65. letter =@"A"; break;
  66. case 11:
  67. letter =@"B"; break;
  68. case 12:
  69. letter =@"C"; break;
  70. case 13:
  71. letter =@"D"; break;
  72. case 14:
  73. letter =@"E"; break;
  74. case 15:
  75. letter =@"F"; break;
  76. default:
  77. letter = [NSString stringWithFormat:@"%ld", number];
  78. }
  79. hex = [letter stringByAppendingString:hex];
  80. if (decimal == 0) {
  81. break;
  82. }
  83. }
  84. return hex;
  85. }
  86. + (UIColor *)colorWithHexString:(NSString *)hexStr {
  87. NSString *cString = [[hexStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
  88. // String should be 6 or 8 characters
  89. if ([cString length] < 6) {
  90. return nil;
  91. }
  92. if ([cString hasPrefix:@"0X"])
  93. cString = [cString substringFromIndex:2];
  94. if ([cString hasPrefix:@"#"])
  95. cString = [cString substringFromIndex:1];
  96. if ([cString length] < 6)
  97. return nil;
  98. NSRange range;
  99. range.location = 0;
  100. range.length = 2;
  101. //R、G、B
  102. NSString *rString = [cString substringWithRange:range];
  103. range.location = 2;
  104. NSString *gString = [cString substringWithRange:range];
  105. range.location = 4;
  106. NSString *bString = [cString substringWithRange:range];
  107. // Scan values
  108. unsigned int r, g, b,a;
  109. [[NSScanner scannerWithString:rString] scanHexInt:&r];
  110. [[NSScanner scannerWithString:gString] scanHexInt:&g];
  111. [[NSScanner scannerWithString:bString] scanHexInt:&b];
  112. float alpha = 1.;
  113. if ([cString length] == 8) {
  114. NSString *aStr = [cString substringWithRange:NSMakeRange(6, 2)];
  115. [[NSScanner scannerWithString:aStr] scanHexInt:&a];
  116. alpha = a/255.;
  117. }
  118. return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:alpha];
  119. }
  120. @end