IT那些事iOS Developer

IOS 零散问题杂谈及解决办法

2017-02-24  本文已影响33人  记住你姓李

刚开始工作的朋友有没有这样的体会我擦 UI 给的图啥玩应这图给的 颜色 #fffff 什么鬼 (类似下面这种) 而我们IOS 通常使用的 都是RGB 这怎么搞 这里我就给大家分享一个简单的解决方法.拿过去就能使用

098DE33A-EE61-4724-80DF-996E46A7A172.png

创建一个类扩展 吧下面的方法拷贝进去 就可以直接使用了,使用时调用下面方法把UI 给你的值 通过字符串的凡是穿进去就解决了,如果你不喜欢做类扩展直接使用也没有任何问题

#import <UIKit/UIKit.h>

@interface UIColor (hexColor)
// 颜色转换:iOS中(以#开头)十六进制的颜色转换为UIColor(RGB)
+ (UIColor *) colorWithHexString: (NSString *)color;
@end

#import "UIColor+hexColor.h"

@implementation UIColor (hexColor)
+ (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];
    }
    // 判断前缀
    if ([cString hasPrefix:@"0X"])
        cString = [cString substringFromIndex:2];
    if ([cString hasPrefix:@"#"])
        cString = [cString substringFromIndex:1];
    if ([cString length] != 6)
        return [UIColor clearColor];
    // 从六位数值中找到RGB对应的位数并转换
    NSRange range;
    range.location = 0;
    range.length = 2;
    //R、G、B
    NSString *rString = [cString substringWithRange:range];
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];
    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];
}
@end

颜色的问题解决了,我们再来一个图片压缩的问题,之前朋友写了个APP 首页图片展示的时候图片跟 ImageView 展示出来的效果特别别扭,主要问题就是imageView和图片比例不协调,展示的图片被压缩了,这种情况还通常出现在用户头像选择之类的
应用场景.这个问题很好解决只需要两行代码就可以搞定

   UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 400, 200, 200)];
    [self.view addSubview:imageView];
    imageView.image = [UIImage imageNamed:@"33684C9C-692E-47A8-87C6-3E1F3E64BA5C"];

这是我们正常展示图片的时候的使用方法,他展示出来的效果是这个样子的

B33FEB48-8A03-48A9-91A3-4DF3BE0877FC.png

然后我们为这基础上再添加两行代码

   UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 400, 200, 200)];
    [self.view addSubview:imageView];
    imageView.image = [UIImage imageNamed:@"33684C9C-692E-47A8-87C6-3E1F3E64BA5C"];
    // 就是这两行
    imageView.contentMode = UIViewContentModeScaleAspectFill;
    imageView.clipsToBounds=YES;

效果如下


279404E2-7EC4-4F12-A4CE-602795A11897.png

微信用户头像选择的模式跟这个方式一模一样,基本可以满足我们的功能需求!

有没有产品要求你做那种获取图片RGB值的功能,我们的一个智能等项目就是这样的,要给灯发送RGB值改变灯箱颜色.这个RGB怎么来的 UI 给你图 到了图上对应的位置要发送对应的RGB.这个功能可以理解为获取图片的RGB

使用下面这段代码就可以解决这个问题,返回的就是颜色值使用时直接把点传入这个方法中就可以.

- (UIColor *)colorOfPoint:(CGPoint)point {
    unsigned char pixel[4] = {0};
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
    
    CGContextTranslateCTM(context, -point.x, -point.y);
    
    [self.imageView.layer renderInContext:context];
    
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    
    UIColor *color = [UIColor colorWithRed:pixel[0]/255.0 green:pixel[1]/255.0 blue:pixel[2]/255.0 alpha:pixel[3]/255.0];
    self.view.backgroundColor = color;
    return color;
}
4a727847-48cf-42b8-b91a-ba88961dd2cf.gif

Xcode7 升级后发现此前所有的项目都无法编译了,报错情况不一,
有些为:
-fembed-bitcode is not supported on versions of iOS prior to 6.0
有些为:
linker command failed with exit code 1
经过反复尝试,找到了问题的解决办法。

解决方法:选择项目文件,从右侧选择“Build Settings”标签,在构建设置的长长的列表中找到“Build Options”--〉“Enable Bitcode”,将其从YES改为NO。也可以在搜索位置输入Bitcode,Xcode会自动列出“Enable Bitcode”选项,将其从YES改为NO。

-------------------------- 更新中 ---------------------------
这篇技术文比较杂包含了很多常见的问题,以及具体的解决办法,希望看到的朋友点个赞支持我继续下去

有没有朋友会经常用到[NSUserDefaults standardUserDefaults](类似免登陆的账号密码存储) 进行一些存储,当我们不需要的时候是否有过清除这些数据.这个跟大家分享的就是[NSUserDefaults standardUserDefaults] 的存储移除

    NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];

    [defs setObject:@"hello world" forKey:@"我勒个去"];
    NSLog(@"____ %@ ______",[defs objectForKey:@"我勒个去"]);
    
    NSDictionary *dict = [defs dictionaryRepresentation];
    if (dict[@"我勒个去"]) {
        [defs removeObjectForKey:@"我勒个去"];
    }
    NSLog(@"____ %@ ______",[defs objectForKey:@"我勒个去"]);
2BDDE1B9-096E-4B8D-82A3-1F5E79E019D2.png
上一篇 下一篇

猜你喜欢

热点阅读