IOS 自定义 UIDatePicker 背景图片

来源:互联网 发布:头发毛躁 知乎 编辑:程序博客网 时间:2024/06/08 10:10

IOS  中 默认的  UIDatePicker   subViews  为只有一个UIView ,可以这样获得

UIView *v1 = [[datePicker subviews] objectAtIndex:0];

    在这个UIView的subViews中有21层(3行时),27层(4行时):

   

 (    "<UIView: 0x5d65350; frame = (0 0; 312 180); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d65380>>",    "<_UIOnePartImageView: 0x5d65ce0; frame = (20 50; 1 48); opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x5d65d90>>",    "<_UIPickerWheelView: 0x5d67790; frame = (21 0; 142 180); autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d67840>>",    "<_UIPickerViewSelectionBar: 0x5d67b70; frame = (21 86; 150 44); userInteractionEnabled = NO; layer = <CALayer: 0x5d67c20>>",    "<UIPickerTable: 0x5d68160; frame = (21 0; 138 180); clipsToBounds = YES; opaque = NO; autoresize = W+TM+H; layer = <CALayer: 0x5d677d0>>",    "<_UIOnePartImageView: 0x5d68640; frame = (21 0; 142 180); opaque = NO; autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d60de0>>",    "<_UIOnePartImageView: 0x5d67bd0; frame = (21 65; 142 47); opaque = NO; autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d68340>>",    "<_UIOnePartImageView: 0x5d68470; frame = (171 50; 2 48); opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x5d684a0>>",    "<_UIPickerWheelView: 0x5d684d0; frame = (173 0; 40 180); autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d68500>>",    "<_UIPickerViewSelectionBar: 0x5d68530; frame = (173 86; 48 44); userInteractionEnabled = NO; layer = <CALayer: 0x5d68560>>",    "<UIPickerTable: 0x5d68940; frame = (173 0; 36 180); clipsToBounds = YES; opaque = NO; autoresize = W+TM+H; layer = <CALayer: 0x5d68590>>",    "<_UIOnePartImageView: 0x5d68b70; frame = (173 0; 40 180); opaque = NO; autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d68c40>>",    "<_UIOnePartImageView: 0x5d68d10; frame = (173 65; 40 47); opaque = NO; autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d68d40>>",    "<_UIOnePartImageView: 0x5d68d70; frame = (221 50; 2 48); opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x5d68da0>>",    "<_UIPickerWheelView: 0x5d68dd0; frame = (223 0; 68 180); autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d68e60>>",    "<_UIPickerViewSelectionBar: 0x5d68e90; frame = (223 86; 76 44); userInteractionEnabled = NO; layer = <CALayer: 0x5d68ec0>>",    "<UIPickerTable: 0x5d68ef0; frame = (223 0; 64 180); clipsToBounds = YES; opaque = NO; autoresize = W+TM+H; layer = <CALayer: 0x5d690d0>>",    "<_UIOnePartImageView: 0x5d69130; frame = (223 0; 68 180); opaque = NO; autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d69230>>",    "<_UIOnePartImageView: 0x5d69290; frame = (223 65; 68 47); opaque = NO; autoresize = W+TM+H; userInteractionEnabled = NO; layer = <CALayer: 0x5d692c0>>",    "<_UIOnePartImageView: 0x5d69340; frame = (299 50; 1 48); opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x5d69370>>",    "<_UIPickerViewTopFrame: 0x5d5ef60; frame = (0 0; 312 180); opaque = NO; autoresize = W+H; layer = <CALayer: 0x5d48a00>>")


    最低层为 一个 UIView,我们可以通过下列语句 获得 ,并且 可以改变背景色

UIView *v3 = [[v1 subviews] objectAtIndex:0 ];v3.backgroundColor = [UIColor redColor];

   之后 为一个UIOnePartImageView 对象,在UIKit的头文件中定义如下,通过这个更改背景色失败,不知为何?继续探索中。。。

/* *     Generated by class-dump 3.1.1. * *     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. */#import <UIKit/UIView.h>@class UIImage;@interface UIOnePartImageView : UIView{    struct CGRect _fromRect;    UIImage *_image;}- (void)dealloc;// IMP=0x32412104- (void)drawRect:(struct CGRect)fp8;// IMP=0x324121a0- (void)setFromRect:(struct CGRect)fp8;// IMP=0x32412184- (void)setImage:(id)fp8;// IMP=0x3241215c@end

之后从 第3层 到 第20层为 18层,分为 3个部分,包含 3 列,但是这不分不可更改 见属性 userInteractionEnabled = NO;

最后第21层为 系统自带的那个  黑色边框 ,可以通过下面的代码获得,并设置为 透明

UIView *v2 = [[v1 subviews] objectAtIndex:20];v2.alpha = 0.0;

最后 ,也是最重要的,自定义图片样式,创建一个UIImageView,如下面这样添加在最上面的22层,就可以啦

UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(-4, -34, 320, 218)];    img.image = [UIImage imageNamed:@"bg.png"];    img.alpha = 1.0;    [v1 addSubview:img];

记住,如果你的图片为透明的话  一定要把第21层的 黑色方框设置为透明啊


原创粉丝点击