iOS播放器视频亮度和音量展示

1:控制器界面进行提前加载View;

  • (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
    if (_isLocked) {
    return;
    }
    UITouch *touch = [touches anyObject];
    CGPoint currentLocation = [touch locationInView:self.playerController.view];
    CGPoint prevLocation = [touch previousLocationInView:self.playerController.view];
    CGFloat offset_x = currentLocation.x - _originalLocation.x;
    CGFloat offset_y = currentLocation.y - _originalLocation.y;

    if (CGPointEqualToPoint(_originalLocation,CGPointZero)) {
    _originalLocation = currentLocation;
    return;
    }
    _originalLocation = currentLocation;
    CGRect frame = [UIScreen mainScreen].bounds;
    if ((currentLocation.x > frame.size.height*0.5) && (ABS(offset_x) < ABS(offset_y))) {

pragma mark --- 判断是点击还是滑动

    if (currentLocation.y - prevLocation.y  != 0) {
        _gestureType = GestureTypeOfVolume;
    } else {
        _gestureType = GestureTypeOfNone;
    }
}
else if ((currentLocation.x < frame.size.height*0.5) && (ABS(offset_x) <= ABS(offset_y)))
{
    if (currentLocation.y - prevLocation.y  != 0) {
    _gestureType = GestureTypeOfBrightness;
   } else {
    _gestureType = GestureTypeOfNone;
    }
}else if ((ABS(offset_x) > ABS(offset_y)))
{
    if (currentLocation.x - prevLocation.x  != 0) {
        _gestureType = GestureTypeOfProgress;
       // NSLog(@"进度");
    } else {
        _gestureType = GestureTypeOfNone;
        //finger touch went downwards
    }
}

if (_gestureType == GestureTypeOfProgress)
{
    if (ABS(offset_x)<1.0) {
        return;
    }
    self.mViewProgress.hidden = NO;
    if (offset_x < -2.0) {
        [self progressAdd:-progressStep];
        self.KProgressimage.image = [UIImage imageNamed:@"kuaitui"];
    }
    if (offset_x > 2.0) {
        [self progressAdd:progressStep];
        self.KProgressimage.image = [UIImage imageNamed:@"kuaijin"];
    }
}
else if (_gestureType == GestureTypeOfVolume)
{
    NSLog(@"上下滑动的距离 %f",offset_y);
    if (offset_y > 2.0)
    {
        [self volumeAdd:-VolumeStep];
    }else if (offset_y < -2.0)
    {
        [self volumeAdd:VolumeStep];
    }
    else{

    }
}else if (_gestureType == GestureTypeOfBrightness)
{
    if (offset_y > 0)
    {
        [self brightnessAdd:-VolumeStep];
    }else{
        [self brightnessAdd:VolumeStep];
    }
}

}
//音量调节

  • (void)volumeAdd:(CGFloat)step {
    [MPMusicPlayerController applicationMusicPlayer].volume += step;
    }
    //亮度调节
  • (void)brightnessAdd:(CGFloat)step
    {
    CGFloat currentLight = [[UIScreen mainScreen] brightness];
    currentLight += step;
    [[UIScreen mainScreen] setBrightness:currentLight]; //重点啊。
    }

//下面是View展示UI的代码
//使用别人创建好的类,这个View创建的还可以,最好优化下就OK了

@interface BrightnessView ()
@property (nonatomic, strong) UIImageView *backImage;
@property (nonatomic, strong) UILabel *title;
@property (nonatomic, strong) UIView *brightnessLevelView;
@property (nonatomic, strong) NSMutableArray *tipArray;
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation BrightnessView

pragma mark - 懒加载

-(UILabel *)title {
if (!_title) {
_title = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, self.bounds.size.width, 30)];
_title.font = [UIFont boldSystemFontOfSize:16];
_title.textColor = [UIColor colorWithRed:0.25f green:0.22f blue:0.21f alpha:1.00f];
_title.textAlignment = NSTextAlignmentCenter;
_title.text = @"亮度调节";
}
return _title;
}

  • (UIImageView *)backImage {

    if (!_backImage) {
    _backImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 79, 76)];
    _backImage.image = [UIImage imageNamed:@"brightness"];
    }
    return _backImage;
    }

-(UIView *)brightnessLevelView {

if (!_brightnessLevelView) {
    _brightnessLevelView  = [[UIView alloc]initWithFrame:CGRectMake(13, 132, self.bounds.size.width - 26, 7)];
    _brightnessLevelView.backgroundColor = [UIColor colorWithRed:0.25f green:0.22f blue:0.21f alpha:1.00f];
    [self addSubview:_brightnessLevelView];
}
return _brightnessLevelView;

}

pragma mark - 单例

  • (instancetype)sharedBrightnessView {
    static BrightnessView *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    instance = [[BrightnessView alloc] init];
    [[[UIApplication sharedApplication].windows firstObject] addSubview:instance];
    });
    return instance;
    }
  • (instancetype)init {
    if (self = [super init]) {
    [self setupUI];
    }
    return self;
    }

  • (void)setupUI {
    self.frame = CGRectMake(ZLScreenWidth * 0.5, ZLScreenHeight * 0.5 - 20, 155, 155);
    self.layer.cornerRadius = 10;
    self.layer.masksToBounds = YES;
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
    [self addSubview:toolbar];
    [self addSubview:self.backImage];
    [self addSubview:self.title];
    [self addSubview:self.brightnessLevelView];
    [self createTips];
    [self addStatusBarNotification];
    [self addKVOObserver];
    self.alpha = 0.0;
    }

pragma makr - Tips的创建

  • (void)createTips {

    self.tipArray = [NSMutableArray arrayWithCapacity:16];
    CGFloat tipW = (self.brightnessLevelView.bounds.size.width - 17) / 16;
    CGFloat tipH = 5;
    CGFloat tipY = 1;

    for (int i = 0; i < 16; i++) {
    CGFloat tipX = i * (tipW + 1) + 1;
    UIImageView *image = [[UIImageView alloc] init];
    image.backgroundColor = [UIColor whiteColor];
    image.frame = CGRectMake(tipX, tipY, tipW, tipH);
    [self.brightnessLevelView addSubview:image];
    [self.tipArray addObject:image];
    }
    [self updateBrightnessLevel:[UIScreen mainScreen].brightness];
    }

  • (void)addStatusBarNotification {
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(statusBarOrientationNotification:)
    name:UIApplicationDidChangeStatusBarOrientationNotification
    object:nil];
    }

  • (void)addKVOObserver {
    [[UIScreen mainScreen] addObserver:self
    forKeyPath:@"brightness"
    options:NSKeyValueObservingOptionNew context:NULL];
    }

  • (void)observeValueForKeyPath:(NSString *)keyPath
    ofObject:(id)object
    change:(NSDictionary *)change
    context:(void *)context {

    CGFloat levelValue = [change[@"new"] floatValue];

    [self removeTimer];
    [self appearBrightnessView];
    [self updateBrightnessLevel:levelValue];
    }

pragma mark - 状态栏方向改变当前View的方向,UI更新

  • (void)statusBarOrientationNotification:(NSNotification *)notify {
    [self setNeedsLayout];
    }

pragma mark - Brightness显示

  • (void)appearBrightnessView {
    [UIView animateWithDuration:0.5 animations:^{
    self.alpha = 1;
    } completion:^(BOOL finished) {
    [self addtimer];
    }];
    }
    //隐藏
  • (void)disAppearBrightnessView {
    if (self.alpha == 1.0) {
    [UIView animateWithDuration:0.5 animations:^{
    self.alpha = 0.0;
    } completion:^(BOOL finished) {
    [self removeTimer];
    }];
    }
    }

pragma mark -关闭时间

  • (void)addtimer {
    if (self.timer) {
    return;
    }
    self.timer = [NSTimer timerWithTimeInterval:1
    target:self
    selector:@selector(disAppearBrightnessView)
    userInfo:nil
    repeats:NO];
    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
    }

  • (void)removeTimer{
    [self.timer invalidate];
    self.timer = nil;
    }

pragma mark - 亮度值展示

  • (void)updateBrightnessLevel:(CGFloat)brightnessLevel {
    CGFloat stage = 1 / 15.0;
    NSInteger level = brightnessLevel / stage;
    for (int i = 0; i < self.tipArray.count; i++) {
    UIImageView *img = self.tipArray[i];
    if (i <= level) {
    img.hidden = NO;
    } else {
    img.hidden = YES;
    }
    }
    }

pragma mark - 刷新VIew

  • (void)layoutSubviews {
    [super layoutSubviews];
    UIInterfaceOrientation currInterfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    switch (currInterfaceOrientation)
    {
    case UIInterfaceOrientationPortrait:
    case UIInterfaceOrientationPortraitUpsideDown:
    {
    self.center = CGPointMake(ZLScreenWidth * 0.5, (ZLScreenHeight - 10) * 0.5);
    }
    break;
    case UIInterfaceOrientationLandscapeLeft:
    case UIInterfaceOrientationLandscapeRight:
    {
    self.center = CGPointMake(ZLScreenWidth * 0.5, (ZLScreenHeight) * 0.5);
    }
    break;
    default:
    break;
    }
    self.backImage.center = CGPointMake(155 * 0.5, 155 * 0.5);
    [self.superview bringSubviewToFront:self];
    }
    @end


    WechatIMG26.jpeg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354