Skip to content

Commit ec5246e

Browse files
authored
Merge pull request #1860 from GitNirajHub/main
Added custom image masking
2 parents 8917bd9 + e80018e commit ec5246e

7 files changed

Lines changed: 48 additions & 10 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "Group 1272628320.png",
5+
"idiom" : "universal",
6+
"scale" : "1x"
7+
},
8+
{
9+
"filename" : "Group 1272628320@2x.png",
10+
"idiom" : "universal",
11+
"scale" : "2x"
12+
},
13+
{
14+
"filename" : "Group 1272628320@3x.png",
15+
"idiom" : "universal",
16+
"scale" : "3x"
17+
}
18+
],
19+
"info" : {
20+
"author" : "xcode",
21+
"version" : 1
22+
}
23+
}
490 Bytes
Loading
953 Bytes
Loading
1.41 KB
Loading

Example/Sources/View Controllers/BasicExampleViewController.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ extension BasicExampleViewController: MessagesDisplayDelegate {
6767

6868
func messageStyle(for message: MessageType, at _: IndexPath, in _: MessagesCollectionView) -> MessageStyle {
6969
let tail: MessageStyle.TailCorner = isFromCurrentSender(message: message) ? .bottomRight : .bottomLeft
70-
return .bubbleTail(tail, .curved)
70+
if let image = UIImage(named: "bobbly") {
71+
return .customImageTail(image, tail)
72+
} else {
73+
return .bubbleTail(tail, .curved)
74+
}
7175
}
7276

7377
func configureAvatarView(_ avatarView: AvatarView, for message: MessageType, at _: IndexPath, in _: MessagesCollectionView) {

Sources/Models/MessageStyle.swift

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public enum MessageStyle {
3030
case bubbleOutline(UIColor)
3131
case bubbleTail(TailCorner, TailStyle)
3232
case bubbleTailOutline(UIColor, TailCorner, TailStyle)
33+
case customImageTail(UIImage,TailCorner)
3334
case custom((MessageContainerView) -> Void)
3435

3536
// MARK: Public
@@ -75,6 +76,20 @@ public enum MessageStyle {
7576
{
7677
return cachedImage
7778
}
79+
80+
func strechAndCache(image: UIImage) -> UIImage {
81+
let stretchedImage = stretch(image)
82+
if let imageCacheKey = imageCacheKey {
83+
MessageStyle.bubbleImageCache.setObject(stretchedImage, forKey: imageCacheKey as NSString)
84+
}
85+
return stretchedImage
86+
}
87+
88+
if case .customImageTail(let image, let corner) = self {
89+
guard let cgImage = image.cgImage else { return nil }
90+
let image = UIImage(cgImage: cgImage, scale: image.scale, orientation: corner.imageOrientation)
91+
return strechAndCache(image: image)
92+
}
7893

7994
guard
8095
let imageName = imageName,
@@ -86,18 +101,14 @@ public enum MessageStyle {
86101
switch self {
87102
case .none, .custom:
88103
return nil
89-
case .bubble, .bubbleOutline:
104+
case .bubble, .bubbleOutline, .customImageTail:
90105
break
91106
case .bubbleTail(let corner, _), .bubbleTailOutline(_, let corner, _):
92107
guard let cgImage = image.cgImage else { return nil }
93108
image = UIImage(cgImage: cgImage, scale: image.scale, orientation: corner.imageOrientation)
94109
}
95110

96-
let stretchedImage = stretch(image)
97-
if let imageCacheKey = imageCacheKey {
98-
MessageStyle.bubbleImageCache.setObject(stretchedImage, forKey: imageCacheKey as NSString)
99-
}
100-
return stretchedImage
111+
return strechAndCache(image: image)
101112
}
102113

103114
// MARK: Internal
@@ -133,7 +144,7 @@ public enum MessageStyle {
133144
return "bubble_full" + tailStyle.imageNameSuffix
134145
case .bubbleTailOutline(_, _, let tailStyle):
135146
return "bubble_outlined" + tailStyle.imageNameSuffix
136-
case .none, .custom:
147+
case .none, .custom, .customImageTail:
137148
return nil
138149
}
139150
}

Sources/Views/MessageContainerView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ open class MessageContainerView: UIImageView {
4949
switch style {
5050
case .none, .custom:
5151
break
52-
case .bubble, .bubbleTail, .bubbleOutline, .bubbleTailOutline:
52+
case .bubble, .bubbleTail, .bubbleOutline, .bubbleTailOutline, .customImageTail:
5353
imageMask.frame = bounds
5454
}
5555
}
5656

5757
private func applyMessageStyle() {
5858
switch style {
59-
case .bubble, .bubbleTail:
59+
case .bubble, .bubbleTail, .customImageTail:
6060
imageMask.image = style.image
6161
sizeMaskToView()
6262
mask = imageMask

0 commit comments

Comments
 (0)