EaseBubbleView+Voice.m 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /************************************************************
  2. * * Hyphenate CONFIDENTIAL
  3. * __________________
  4. * Copyright (C) 2016 Hyphenate Inc. All rights reserved.
  5. *
  6. * NOTICE: All information contained herein is, and remains
  7. * the property of Hyphenate Inc.
  8. * Dissemination of this information or reproduction of this material
  9. * is strictly forbidden unless prior written permission is obtained
  10. * from Hyphenate Inc.
  11. */
  12. #import "EaseBubbleView+Voice.h"
  13. #define ISREAD_VIEW_SIZE 10.f
  14. @implementation EaseBubbleView (Voice)
  15. #pragma mark - private
  16. - (void)_setupVoiceBubbleMarginConstraints
  17. {
  18. [self.marginConstraints removeAllObjects];
  19. //image view
  20. NSLayoutConstraint *imageWithMarginTopConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:self.margin.top];
  21. NSLayoutConstraint *imageWithMarginBottomConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-self.margin.bottom];
  22. [self.marginConstraints addObject:imageWithMarginTopConstraint];
  23. [self.marginConstraints addObject:imageWithMarginBottomConstraint];
  24. //duration label
  25. NSLayoutConstraint *durationWithMarginTopConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:self.margin.top];
  26. NSLayoutConstraint *durationWithMarginBottomConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-self.margin.bottom];
  27. [self.marginConstraints addObject:durationWithMarginTopConstraint];
  28. [self.marginConstraints addObject:durationWithMarginBottomConstraint];
  29. if(self.isSender){
  30. NSLayoutConstraint *imageWithMarginRightConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-self.margin.right];
  31. [self.marginConstraints addObject:imageWithMarginRightConstraint];
  32. NSLayoutConstraint *durationLeftConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:self.margin.left];
  33. [self.marginConstraints addObject:durationLeftConstraint];
  34. }
  35. else{
  36. NSLayoutConstraint *imageWithMarginLeftConstraint = [NSLayoutConstraint constraintWithItem:self.voiceImageView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:self.margin.left];
  37. [self.marginConstraints addObject:imageWithMarginLeftConstraint];
  38. NSLayoutConstraint *durationRightConstraint = [NSLayoutConstraint constraintWithItem:self.voiceDurationLabel attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-self.margin.right];
  39. [self.marginConstraints addObject:durationRightConstraint];
  40. [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:ISREAD_VIEW_SIZE/2]];
  41. [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-ISREAD_VIEW_SIZE/2]];
  42. [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
  43. [self.marginConstraints addObject:[NSLayoutConstraint constraintWithItem:self.isReadView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.backgroundImageView attribute:NSLayoutAttributeTop multiplier:1.0 constant:ISREAD_VIEW_SIZE]];
  44. }
  45. [self addConstraints:self.marginConstraints];
  46. }
  47. - (void)_setupVoiceBubbleConstraints
  48. {
  49. if (self.isSender) {
  50. self.isReadView.hidden = YES;
  51. }
  52. [self _setupVoiceBubbleMarginConstraints];
  53. }
  54. #pragma mark - public
  55. - (void)setupVoiceBubbleView
  56. {
  57. self.voiceImageView = [[UIImageView alloc] init];
  58. self.voiceImageView.translatesAutoresizingMaskIntoConstraints = NO;
  59. self.voiceImageView.backgroundColor = [UIColor clearColor];
  60. self.voiceImageView.animationDuration = 1;
  61. [self.backgroundImageView addSubview:self.voiceImageView];
  62. self.voiceDurationLabel = [[UILabel alloc] init];
  63. self.voiceDurationLabel.translatesAutoresizingMaskIntoConstraints = NO;
  64. self.voiceDurationLabel.backgroundColor = [UIColor clearColor];
  65. [self.backgroundImageView addSubview:self.voiceDurationLabel];
  66. self.isReadView = [[UIImageView alloc] init];
  67. self.isReadView.translatesAutoresizingMaskIntoConstraints = NO;
  68. self.isReadView.layer.cornerRadius = ISREAD_VIEW_SIZE/2;
  69. self.isReadView.clipsToBounds = YES;
  70. self.isReadView.backgroundColor = [UIColor redColor];
  71. [self.backgroundImageView addSubview:self.isReadView];
  72. [self _setupVoiceBubbleConstraints];
  73. }
  74. - (void)updateVoiceMargin:(UIEdgeInsets)margin
  75. {
  76. if (_margin.top == margin.top && _margin.bottom == margin.bottom && _margin.left == margin.left && _margin.right == margin.right) {
  77. return;
  78. }
  79. _margin = margin;
  80. [self removeConstraints:self.marginConstraints];
  81. [self _setupVoiceBubbleMarginConstraints];
  82. }
  83. @end