• iOS中的颜色

    2017-01-09 10:33:50
    最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下。先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout 里通过nib 注册使用,为这个xib设置了背景色,...

    最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下。

    先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout 里通过nib 注册使用,为这个xib设置了背景色,然后Cell也设置了背景色(用RGBA的API代码设置的颜色),这两个颜色值一样,但是实际显示出来颜色就是不一样。如下图所示
    这里写图片描述

    xib中的RGBA颜色

    这里写图片描述

    从上图可以看出,这里的RGB颜色有三种,Adobe RGB、Device RGB、Generic RGB,Xcode 中默认勾选的是Generic RGB。

    API中的颜色

    我们一般常常会使用+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 来自定义颜色。
    但是你有没有想过这个Api里使用的是哪种RGB类型呢?

    这里写图片描述

    所以,如果我们想要使得xib里的RGB颜色与代码设置的RGB颜色一样,那么我们就需要使用同一种RGB颜色类型。即在xib也选择Device RGB来设置颜色就可以了。

    关于iOS中的颜色以前也记录了另一个问题,也是使用RGB颜色解决的,地址是:iOS下使状态栏颜色与H5中背景色一致

    展开全文
  • iOS 实现图片颜色拾取器为什么需要颜色拾取iOS颜色拾取器的实现CGContext的使用自定义颜色采集板View颜色选择器的使用结束 为什么需要颜色拾取 有些APP开发业务中经常需要用到颜色拾取的功能,来完成对所需颜色的...

    为什么需要颜色拾取

    有些APP开发业务中经常需要用到颜色拾取的功能,来完成对所需颜色的选择,比如主题设置功能,废话不多说,需要的同学自己拿去用吧!

    iOS颜色拾取器的实现

    CGContext的使用

    使用CGContext进行图片颜色的拾取能够节省内存的使用(CGContext对图片管理的具体使用后期来专讲一下)

    1. 获取UIImageView中的UIImage
    2. 拾取坐标的转换
    3. 利用BitmapInfo来获取UIImage的RGB分布
    4. 利用CGContext获取目标像素的分布值
    5. 输出对应位置的颜色值
    func getColor(inImageView imageview: UIImageView, selectedPoint: CGPoint) -> UIColor?{
            //imageview图片
            let image: UIImage = imageview.image!
            //imageview中的坐标对用image的坐标
            let x_factor = image.size.width/imageview.frame.width
            let y_factor = image.size.height/imageview.frame.height
            let newSelectedPoint: CGPoint = CGPoint.init(x: selectedPoint.x*x_factor, y: y_factor*selectedPoint.y)
            if !CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height).contains(newSelectedPoint){
                return nil
            }
            // 用来存放目标像素值
            var pixel = [UInt8](repeatElement(0, count: 4))
            // 颜色空间为 RGB,这决定了输出颜色的编码是 RGB 还是其他(比如 YUV)
            let colorSpace = CGColorSpaceCreateDeviceRGB()
            // 设置位图颜色分布为 RGBA
            let bitmapInfo = CGImageAlphaInfo.premultipliedLast.rawValue
            guard let context = CGContext(data: &pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: bitmapInfo) else {
                return nil
            }
            // 设置 context 原点偏移为目标位置所有坐标
            context.translateBy(x: -newSelectedPoint.x, y: -newSelectedPoint.y)
            // 将图像渲染到 context 中
            imageview.layer.render(in: context)
            
            return UIColor(red: CGFloat(pixel[0]) / 255.0,
                           green: CGFloat(pixel[1]) / 255.0,
                           blue: CGFloat(pixel[2]) / 255.0,
                           alpha: CGFloat(pixel[3]) / 255.0)
        }
    

    自定义颜色采集板View

    1. View中包含UIImageView显示需要采集颜色的图片
    2. 包含UIButton作为采集位置的指示器
    3. 利用UIPanGestureRecognizer实现拖动UIButton选择采集位置
    import UIKit
    typealias ColorChange = (UIColor?)->Void //选择颜色的闭包
    @IBDesignable         //可视化的关键字
    class ColorSelectedView: UIView {
        @IBOutlet var bgview: UIView!
        @IBOutlet weak var gradientImageView: UIImageView!
        @IBOutlet weak var selectedBtn: UIButton!
        var panGesture: UIPanGestureRecognizer!
        var colorChange: ColorChange?
        override init(frame: CGRect) {       //每一步都必须
            super.init(frame: frame)//实现父初始化
            bgview = loadViewFromNib()  //从xib中加载视图
            bgview.frame = bounds       //设置约束或者布局
            addSubview(bgview)          //将其添加到自身中
        }
        
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            bgview = loadViewFromNib()
            bgview.frame = bounds
            addSubview(bgview)
        }
        //MARK:加载xib文件的view视图
        func loadViewFromNib() -> UIView {
            //重点注意,否则使用的时候不会同步显示在IB中,只会在运行中才显示。
            //注意下面的nib加载方式直接影响是否可视化,如果bundle不确切(为nil或者为main)则看不到实时可视化
            let nib = UINib(nibName:String(describing: ColorSelectedView.self), bundle: Bundle(for:ColorSelectedView.self))//【????】怎么将类名变为字符串:String(describing: MyView.self) Bundle的参数为type(of: self)也可以。
            let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
            panGesture = UIPanGestureRecognizer.init(target: self, action: #selector(gestureAction))
            selectedBtn?.addGestureRecognizer(panGesture)
            return view
        }
        
        //拖动选择需要采集颜色的位置
        @objc func gestureAction(_ sender: UIPanGestureRecognizer){
            if sender.view == self.selectedBtn{
                if sender.state != .ended && sender.state != .failed{
                    let point: CGPoint = sender.location(in: self)
                    var newpoint: CGPoint = point
                    if point.x < 0 {
                        newpoint.x = 0
                    }
                    if point.y < 0 {
                        newpoint.y = 0
                    }
                    if point.x > self.frame.size.width-30 {
                        newpoint.x = self.frame.size.width-30
                    }
                    if point.y > self.frame.size.height-30 {
                        newpoint.y = self.frame.size.height-30
                    }
                    self.selectedBtn.frame.origin = newpoint
                    let selecteColor: UIColor? =self.getColor(inImageView: self.gradientImageView, selectedPoint: CGPoint.init(x: newpoint.x+15, y: newpoint.y+15))
                    if selecteColor != nil{
                        if colorChange != nil{
                            colorChange!(selecteColor)
                        }
                    }
                }
            }
        }
    }
    

    在这里插入图片描述

    颜色选择器的使用

    1. 在xib文件中或者在storyboard可视化界面中直接使用
    2. 在代码中直接使用
    @IBOutlet weak var colorSelectedView: ColorSelectedView!
    ...
    colorSelectedView.colorChange = {
                (color: UIColor?) -> Void in
                if color != nil{
                    ...
                    //按自己需要使用该颜色
                  }
            }
    

    结束

    哈哈,可以自己拖动Button进行位置选择,当拖动时会实时输出选中位置的颜色。好了,就是这么简单!你也来试试吧!

    展开全文
  • iOS 改变图片颜色

    2019-09-24 18:23:47
    在做项目的时候碰到了一个需求,把app的主题颜色改变成另外一种颜色,由于没有给出新的素材图片,需要把现有图片的颜色改变一下。下面是改变图片颜色的方法(一般对于单一颜色的图片) imageWithRenderingMode: ...

    在做项目的时候碰到了一个需求,把app的主题颜色改变成另外一种颜色,由于没有给出新的素材图片,需要把现有图片的颜色改变一下。下面是改变图片颜色的方法(一般对于单一颜色的图片)

    imageWithRenderingMode:

    UIImage有一个方法imageWithRenderingMode:,通过它设置图片的渲染模式,再通过设置tintcolor,就可以改变图片颜色。其中参数部分UIIMageRenderingMode有三个枚举对应不同的渲染模式:

    typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
        UIImageRenderingModeAutomatic,          // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式
        UIImageRenderingModeAlwaysOriginal,     // 始终绘制图片原始状态,不使用Tint Color
        UIImageRenderingModeAlwaysTemplate,     // 始终根据Tint Color绘制图片,忽略图片的颜色信息
    }
    

    使用实例:

    UIImage *image = [UIImage imageNamed:@"imageName"];
    self.ImageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    [self.ImageView setTintColor:[UIColor redColor]];
    
    imageWithTintColor:

    iOS13发布后,UIImage有一个新增方法imageWithTintColor:,可以通过它改变图片颜色

    使用实例:

    UIImage *image = [UIImage imageNamed:@"imageName"];
    self.ImageView.image = [image imageWithTintColor:[UIColor redColor]];
    
    展开全文
  • iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性...

    iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabeltextLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。

    1.     实例化方法和使用方法

    实例化方法:

    使用字符串初始化

    - (id)initWithString:(NSString *)str;

    例:

    NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀"];


    - (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;


    字典中存放一些属性名和属性值,如:

    NSDictionary *attributeDict = [NSDictionarydictionaryWithObjectsAndKeys:

                                        [UIFontsystemFontOfSize:15.0],NSFontAttributeName,

                                        [UIColorredColor],NSForegroundColorAttributeName,

                                       NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];

    NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀" attributes:attributeDict];

    - (id)initWithAttributedString:(NSAttributedString *)attester;

    使用NSAttributedString初始化,跟NSMutableString,NSString类似


    使用方法:

    为某一范围内文字设置多个属性

    - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

    为某一范围内文字添加某个属性

    - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;

    为某一范围内文字添加多个属性

    - (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;

    移除某范围内的某个属性

    - (void)removeAttribute:(NSString *)name range:(NSRange)range;

    2.     常见的属性及说明

    NSFontAttributeName  字体

    NSParagraphStyleAttributeName  段落格式 

    NSForegroundColorAttributeName  字体颜色

    NSBackgroundColorAttributeName   背景颜色

    NSStrikethroughStyleAttributeName 删除线格式

    NSUnderlineStyleAttributeName      下划线格式

    NSStrokeColorAttributeName        删除线颜色

    NSStrokeWidthAttributeName 删除线宽度

    NSShadowAttributeName  阴影

    更多方法和属性说明详见苹果官方说明文档:

    https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003689

    3.   使用实例

       UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];

      testLabel.backgroundColor = [UIColor lightGrayColor];

      testLabel.textAlignment = NSTextAlignmentCenter;

      NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"];

      [AttributedStr addAttribute:NSFontAttributeName

                            value:[UIFont systemFontOfSize:16.0]

                            range:NSMakeRange(2, 2)];

      [AttributedStr addAttribute:NSForegroundColorAttributeName

                            value:[UIColor redColor]

                            range:NSMakeRange(2, 2)];

      testLabel.attributedText = AttributedStr;

      [self.view addSubview:testLabel];


    运行效果:

    iOS富文本NSMutableAttributedString,NSAttributedString的使用 - snowyshell - snowyshell的博客

    另外,其他可以设置text 的控件(如UIButtonUITextField)也都有该属性,该文章不够详细,只是简单介绍,其他效果的实现参考API中更多的属性及使用方法。


    转载自:http://snowyshell.blog.163.com/blog/static/2209140342014475383375/

    展开全文
  • iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Color 方法一: ...


    在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem



    更改导航栏的背景和文字Color

    方法一:

        //set NavigationBar 背景颜色&title 颜色
        [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.0 green:155/255.0 blue:213/255.0 alpha:1.0]];
        [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],UITextAttributeTextColor,nil]];
    效果如下:

    我们把背景改成了蓝色,title文字改成了白色,是不是很简单呢?NavigationBar极其push过去的子页面也会是你修改后的背景颜色

    方法二:

        //设置NavigationBar背景颜色
        [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
        //@{}代表Dictionary
        [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
    效果如下:



    在导航栏使用背景图片:

    如果您的应用程序使用了自定义图像作为栏的背景,你需要提供一个“更大”的图片,使其延伸了状态栏的后面。导航栏的高度现在是从44点(88像素)更改为64点(128像素)。
    仍然可以使用了setBackgroundImage:方法来指定自定义图像的导航栏。下面是代码行设置背景图片:

    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_bg.png"] forBarMetrics:UIBarMetricsDefault];
    

    效果图和上面的一样,我就不贴出来了。


    改变导航栏标题的字体

    就像iOS 6,我们可以通过使用导航栏的“titleTextAttributes”属性来自定义的文本样式。可以指定字体,文字颜色,文字阴影颜色,文字阴影在文本标题偏移属性字典,使用下面的文本属性键:

    UITextAttributeFont - 字体
    UITextAttributeTextColor - 文字颜色
    UITextAttributeTextShadowColor - 文字阴影颜色
    UITextAttributeTextShadowOffset - 偏移用于文本阴影

    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(0, 1);
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
    shadow, NSShadowAttributeName,
    [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:21.0], NSFontAttributeName, nil]];


    使用图片作为导航栏标题

    不想标题栏是光秃秃的文字?可以通过使用代码行中的图像或标志取代它:简单地改变titleview用来自定义,(适用于较低版本)

    self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"appcoda-logo.png"]];

    效果如下,我随便用了个图片,别介意:



    添加多个栏按钮项目

    您希望添加导航栏的一侧不止一个栏按钮项目,无论是leftBarButtonItems和rightBarButtonItems 您在导航栏左侧/右侧指定自定义栏按钮项目。比如你想添加一个摄像头和一个共享按钮右侧的吧。您可以使用下面的代码:

        UIBarButtonItem *shareItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action: nil];
        UIBarButtonItem *cameraItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action: nil];
        NSArray *itemsArr = @[shareItem,cameraItem];
        self.navigationItem.rightBarButtonItems = itemsArr;



    自定义后退按钮的文字和颜色

    通常情况下,我们使用UINavigationController时,push到的子页面,左上角会是系统自动取值上一层父页面的title名称,默认情况是这样,那么我们该如何修改它呢?


    左侧显示了父页面的title:用户登录,可是我们想修改成返回,方式有很多,举些例子

    方法一:

    通过设置navigationItem的backBarButtonItem可以直接更换文字,【注意,要在父视图的Controller中设置】如下:

        UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
        self.navigationItem.backBarButtonItem = item;
    效果如下:

    所有的子界面返回时都变成了我们定义的文字,如果不想显示文字,直接"",就会单独显示一个系统的返回箭头图标,也是很清晰的感觉。


    做到这里发现文字颜色和背景有重复,那么如何自定义其颜色呢?在iOS7,可以改变tintColor属性,它提供了一个快速和简单的方式,下面是一个示例代码片段:

    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
    效果如下:

    全是系统的图标和文字,这回看着舒服了,有木有?【除了后退按钮,请注意,tintColor属性影响所有按钮标题和按钮图像


    最后举个例子,另外一种实现自定义导航控制器返回按钮,代码如下:

         [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:19.0]}];
        
        self.title=[NSString stringWithFormat:@"第%lu页",(unsigned long)self.navigationController.viewControllers.count];
        
        //自定义返回按钮
        UIImage *backButtonImage = [[UIImage imageNamed:@"fanhui.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)];
        [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        //将返回按钮的文字position设置不在屏幕上显示
        [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];

    效果如下:



    最后说一下使用pushViewController切换到下一个视图时,navigation controller按照以下3条顺序更改导航栏的左侧按钮(本段摘自网络):

    1、如果B视图有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮;
    2、如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自定义项;
    3、如果前2条都没有,则默认显示一个后退按钮,后退按钮的标题是A视图的标题;






    展开全文
  • iOS电池栏颜色设置

    2019-05-31 09:57:21
    首先看一下用得最多的一个方法 /// 然后在viewWillAppear里头设置statusBar的Style [[UIApplication sharedApplication] setStatusBarStyle:&...但是这个setStatusBarStyle方法iOS9就过期了 ...
  • 转自:http://blog.csdn.net/mazy_ma/article/details/51775670有时,UITextField自带的Placeholder的颜色太浅或者不满足需求,所以需要修改,而...例如:系统默认的Placeholder颜色太浅 需要加深颜色,或者改变颜色
  • IOS 按钮字体颜色设置

    2015-02-02 15:08:35
    UIColor RGB颜色对照表 http://blog.csdn.net/sqc3375177/article/details/9198765UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom]; [customButton setTitleColor:_btnFontColor for
  • ios上状态栏 就是指的最上面的20像素高的部分 状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池、时间等部分; 背景部分:就是显示黑色或者图片的背景部分; (一)设置statusBar...
  • iOS Label分段设置颜色

    2016-10-09 17:00:28
    iOS label设置分段显示不同颜色
  • ios设置TextField光标颜色
  • 方法1: [[UITextField appearance] setTintColor:[UIColor blackColor]]; 这种方法将影响所有TextField。 方法2: textField.tintColor = [UIColor redColor];...如果在InterfaceBuilder中修改View的TintColor属性...
  • 在日常开发中有一个小技巧来改变图片颜色,很是方便,比如UI一开始给你的图片颜色是白色,后面要换成蓝色,这时候,你懒的再去弄一张一摸一样只是颜色不一样的图片加进来,这时候这个小技巧就起到了作用,找UI切图也...
  • ios 设置tabbar选中颜色

    2015-05-27 15:49:07
    [self.tabBarController.tabBar setSelectedImageTintColor:[UIColor RIColor2]];
  • ios扩展16进制颜色

    2018-10-18 09:23:42
    iOS开发一般都是用到RGB颜色,美工给我们作图的时候往往给我们的色值都是十六进制的颜色如 #ff0000,如果先把16进制转换为RGB 的10 进制那将是非常麻烦的事,我们可以为 UIColor 添加一个扩展类(UIColor+Ext.swift)...
  • ios给按钮图片根据不同的主题更改颜色
  • iOS13之前修改的方法 //未选中颜色 NSDictionary * noselectedTitleColordic =@{NSForegroundColorAttributeName:[UIColor colorWithHexString:@"#666666"]}; [[UITabBarItem appearance] ...
  •  着色(Tint Color)是iOS7界面中的一个设置UIImage颜色的渲染模式:UIImage.renderingMode;我们可以通过这个设置一个UIImage在渲染时是否使用当前视图的Tint Color。  UIImage新增的这一个只读属性:rendering...
  • iOS Status Bar 状态栏颜色设置 状态栏分前后两部分: 文字部分: 指的是显示电池,时间等 背景部分: 就是显示黑色或者图片的背景部分 1. 设置Status Bar[文字部分] // 默认的黑色 UIStatusBarStyleDefault /...
  • iOS 导航栏颜色设置

    2017-07-10 14:06:15
    //设置返回按钮颜色  self.navigationController.navigationBar.tintColor = [UIColor whiteColor];   //设置导航条背景颜色  self.navigationController.navigationBar.barTintColor = ThemeColor...
1 2 3 4 5 ... 20
收藏数 80,714
精华内容 32,285
热门标签
关键字:

212的颜色 ios