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层的 黑色方框设置为透明啊