使用自定义UISlider控制View亮度

上一次分享了自定义Slider
其实当时在项目中这个slider是用来设置屏幕的亮度,拖动的时候也有预览,如图:

我们来说说屏幕亮度的实现原理吧,可以调用私有API来调节屏幕亮度,但苹果官方审核未必能通得过。所以我的做法原理是:
1、放置一个View盖住整个屏幕(可以在IB里拖好也可以使用代码实现)
2、设置遮挡View的User Interaction Enabled的属性为NO,这样用户点击到这个View就不会有任何互动,我个人理解是这个View既盖住了其他的控件,又不会影响其他控件的点击等互动。
3、设置遮挡View的背景色为黑,Alpha为1.0就是最黑,0就是透明,这样,值越小亮度就越大,值越大亮度就越小。

但是,还是很愦憾,这不是真正的调整了亮度,最亮的亮度还是取决于你自己的iPhone本身的亮度设置。但是聊胜于无,下面,我们来讲讲实现吧!

我使用的是UIImageView哦,至于其他的View,大家都可以自己实验一下。
首先:
在IB中拖一个UIImageView出来,随便放哪里,最好不影响设计,大小也无所谓,因为一会儿在代码中把它占满整个屏幕,UIImageView默认的User Interaction Enabled属性是为NO的,所以不用改:

然后,设置背景色为黑的,在头文件中声明IBOutlet,IB中关联后,现在可以开始写代码了:
在ViewDidLoad方法中,把UIImageView的宽高占满整个View:

[imageCover setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

上一次说到自定义Slider的 时候,已说过Slider的UIControlEventValueChanged是正在拖动时触发的事件,而 UIControlEventTouchUpInside是拖动完毕时触发的,所以拖动时的预览可以写在ValueChanged中,而如果要记录亮度值 到数据库之类的就写在TouchUpInside事件中,ValueChanged代码:

-(IBAction)sliderValueChanged:(id)sender{
  UISlider *slider = (UISlider *)sender;
  //slider的value最大设到1.0,因为背景色为黑,所以亮度为1.0-value
  [imageCover setAlpha:1.0 - slider.value];
}

以上内容,转载请注明来自博客园,作者:jauntlin

 



posted @ 2011-12-20 22:32  jauntlin  阅读(1642)  评论(0编辑  收藏  举报