/************************************************************ * * Hyphenate CONFIDENTIAL * __________________ * Copyright (C) 2016 Hyphenate Inc. All rights reserved. * * NOTICE: All information contained herein is, and remains * the property of Hyphenate Inc. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Hyphenate Inc. */ #import "EaseBubbleView+Voice.h" #define ISREAD_VIEW_SIZE 10.f @implementation EaseBubbleView (Voice) #pragma mark - private - (void)_setupVoiceBubbleMarginConstraints { [self.marginConstraints removeAllObjects]; //image view NSLayoutConstraint *imageWithMarginTopConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:self.margin.top]; NSLayoutConstraint *imageWithMarginBottomConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-self.margin.bottom]; [self.marginConstraints addObject:imageWithMarginTopConstraint]; [self.marginConstraints addObject:imageWithMarginBottomConstraint]; //duration label NSLayoutConstraint *durationWithMarginTopConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:self.margin.top]; NSLayoutConstraint *durationWithMarginBottomConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-self.margin.bottom]; [self.marginConstraints addObject:durationWithMarginTopConstraint]; [self.marginConstraints addObject:durationWithMarginBottomConstraint]; if(self.isSender){ NSLayoutConstraint *imageWithMarginRightConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-self.margin.right]; [self.marginConstraints addObject:imageWithMarginRightConstraint]; NSLayoutConstraint *durationLeftConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:self.margin.left]; [self.marginConstraints addObject:durationLeftConstraint]; } else{ NSLayoutConstraint *imageWithMarginLeftConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:self.margin.left]; [self.marginConstraints addObject:imageWithMarginLeftConstraint]; NSLayoutConstraint *durationRightConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-self.margin.right]; [self.marginConstraints addObject:durationRightConstraint]; [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:ISREAD_VIEW_SIZE/2]]; [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-ISREAD_VIEW_SIZE/2]]; [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]]; [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:ISREAD_VIEW_SIZE]]; } [self addConstraints:self.marginConstraints]; } - (void)_setupVoiceBubbleConstraints { if (self.isSender) { self.isReadView.hidden = YES; } [self _setupVoiceBubbleMarginConstraints]; } #pragma mark - public - (void)setupVoiceBubbleView { self.voiceImageView = [[UIImageView alloc] init]; self.voiceImageView.translatesAutoresizingMaskIntoConstraints = NO; self.voiceImageView.backgroundColor = [UIColor clearColor]; self.voiceImageView.animationDuration = 1; [self.backgroundImageView addSubview:self.voiceImageView]; self.voiceDurationLabel = [[UILabel alloc] init]; self.voiceDurationLabel.translatesAutoresizingMaskIntoConstraints = NO; self.voiceDurationLabel.backgroundColor = [UIColor clearColor]; [self.backgroundImageView addSubview:self.voiceDurationLabel]; self.isReadView = [[UIImageView alloc] init]; self.isReadView.translatesAutoresizingMaskIntoConstraints = NO; self.isReadView.layer.cornerRadius = ISREAD_VIEW_SIZE/2; self.isReadView.clipsToBounds = YES; self.isReadView.backgroundColor = [UIColor redColor]; [self.backgroundImageView addSubview:self.isReadView]; [self _setupVoiceBubbleConstraints]; } - (void)updateVoiceMargin:(UIEdgeInsets)margin { if (_margin.top == margin.top && _margin.bottom == margin.bottom && _margin.left == margin.left && _margin.right == margin.right) { return; } _margin = margin; [self removeConstraints:self.marginConstraints]; [self _setupVoiceBubbleMarginConstraints]; } @end