IOS 自定义 UIDatePicker 背景图片

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值