mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-04 18:41:00 +00:00
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
This commit is contained in:
commit
33e47e5ae3
@ -500,7 +500,7 @@ public final class PrincipalThemeAdditionalGraphics {
|
|||||||
public let chatEmptyItemBackgroundImage: UIImage
|
public let chatEmptyItemBackgroundImage: UIImage
|
||||||
public let chatLoadingIndicatorBackgroundImage: UIImage
|
public let chatLoadingIndicatorBackgroundImage: UIImage
|
||||||
|
|
||||||
public let chatBubbleShareButtonImage: UIImage
|
|
||||||
public let chatBubbleNavigateButtonImage: UIImage
|
public let chatBubbleNavigateButtonImage: UIImage
|
||||||
public let chatBubbleActionButtonIncomingMiddleImage: UIImage
|
public let chatBubbleActionButtonIncomingMiddleImage: UIImage
|
||||||
public let chatBubbleActionButtonIncomingBottomLeftImage: UIImage
|
public let chatBubbleActionButtonIncomingBottomLeftImage: UIImage
|
||||||
@ -547,7 +547,6 @@ public final class PrincipalThemeAdditionalGraphics {
|
|||||||
self.chatEmptyItemBackgroundImage = generateStretchableFilledCircleImage(radius: 14.0, color: serviceColor.fill)!
|
self.chatEmptyItemBackgroundImage = generateStretchableFilledCircleImage(radius: 14.0, color: serviceColor.fill)!
|
||||||
self.chatLoadingIndicatorBackgroundImage = generateStretchableFilledCircleImage(diameter: 30.0, color: serviceColor.fill)!
|
self.chatLoadingIndicatorBackgroundImage = generateStretchableFilledCircleImage(diameter: 30.0, color: serviceColor.fill)!
|
||||||
|
|
||||||
self.chatBubbleShareButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.message.shareButtonFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.shareButtonStrokeColor, wallpaper: wallpaper), foregroundColor: bubbleVariableColor(variableColor: theme.message.shareButtonForegroundColor, wallpaper: wallpaper), image: UIImage(bundleImageName: "Chat/Message/ShareIcon"))!
|
|
||||||
self.chatBubbleNavigateButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.message.shareButtonFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.shareButtonStrokeColor, wallpaper: wallpaper), foregroundColor: bubbleVariableColor(variableColor: theme.message.shareButtonForegroundColor, wallpaper: wallpaper), image: UIImage(bundleImageName: "Chat/Message/NavigateToMessageIcon"), iconOffset: CGPoint(x: 0.0, y: 1.0))!
|
self.chatBubbleNavigateButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.message.shareButtonFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.shareButtonStrokeColor, wallpaper: wallpaper), foregroundColor: bubbleVariableColor(variableColor: theme.message.shareButtonForegroundColor, wallpaper: wallpaper), image: UIImage(bundleImageName: "Chat/Message/NavigateToMessageIcon"), iconOffset: CGPoint(x: 0.0, y: 1.0))!
|
||||||
self.chatBubbleActionButtonIncomingMiddleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsStrokeColor, wallpaper: wallpaper), position: .middle, bubbleCorners: bubbleCorners)
|
self.chatBubbleActionButtonIncomingMiddleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsStrokeColor, wallpaper: wallpaper), position: .middle, bubbleCorners: bubbleCorners)
|
||||||
self.chatBubbleActionButtonIncomingBottomLeftImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsStrokeColor, wallpaper: wallpaper), position: .bottomLeft, bubbleCorners: bubbleCorners)
|
self.chatBubbleActionButtonIncomingBottomLeftImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.message.incoming.actionButtonsStrokeColor, wallpaper: wallpaper), position: .bottomLeft, bubbleCorners: bubbleCorners)
|
||||||
|
@ -95,20 +95,16 @@ class ChatMessageShareButton: HighlightableButtonNode {
|
|||||||
self.isReplies = isReplies
|
self.isReplies = isReplies
|
||||||
|
|
||||||
let graphics = PresentationResourcesChat.additionalGraphics(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper, bubbleCorners: presentationData.chatBubbleCorners)
|
let graphics = PresentationResourcesChat.additionalGraphics(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper, bubbleCorners: presentationData.chatBubbleCorners)
|
||||||
//var updatedShareButtonBackground: UIImage?
|
|
||||||
var updatedIconImage: UIImage?
|
var updatedIconImage: UIImage?
|
||||||
if case .pinnedMessages = subject {
|
if case .pinnedMessages = subject {
|
||||||
updatedIconImage = PresentationResourcesChat.chatFreeNavigateButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
updatedIconImage = PresentationResourcesChat.chatFreeNavigateButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||||
//updatedShareButtonBackground = graphics.chatBubbleNavigateButtonImage
|
|
||||||
} else if isReplies {
|
} else if isReplies {
|
||||||
//updatedShareButtonBackground = PresentationResourcesChat.chatFreeCommentButtonBackground(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
|
||||||
updatedIconImage = PresentationResourcesChat.chatFreeCommentButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
updatedIconImage = PresentationResourcesChat.chatFreeCommentButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||||
} else if message.id.peerId.isRepliesOrSavedMessages(accountPeerId: account.peerId) {
|
} else if message.id.peerId.isRepliesOrSavedMessages(accountPeerId: account.peerId) {
|
||||||
updatedIconImage = PresentationResourcesChat.chatFreeNavigateButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
updatedIconImage = PresentationResourcesChat.chatFreeNavigateButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||||
//updatedShareButtonBackground = graphics.chatBubbleNavigateButtonImage
|
|
||||||
} else {
|
} else {
|
||||||
updatedIconImage = PresentationResourcesChat.chatFreeShareButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
updatedIconImage = PresentationResourcesChat.chatFreeShareButtonIcon(presentationData.theme.theme, wallpaper: presentationData.theme.wallpaper)
|
||||||
//updatedShareButtonBackground = graphics.chatBubbleShareButtonImage
|
|
||||||
}
|
}
|
||||||
self.backgroundNode.color = presentationData.theme.theme.chat.serviceMessage.components.withDefaultWallpaper.dateFillStatic
|
self.backgroundNode.color = presentationData.theme.theme.chat.serviceMessage.components.withDefaultWallpaper.dateFillStatic
|
||||||
self.iconNode.image = updatedIconImage
|
self.iconNode.image = updatedIconImage
|
||||||
|
@ -414,7 +414,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
private var mosaicStatusNode: ChatMessageDateAndStatusNode?
|
private var mosaicStatusNode: ChatMessageDateAndStatusNode?
|
||||||
private var actionButtonsNode: ChatMessageActionButtonsNode?
|
private var actionButtonsNode: ChatMessageActionButtonsNode?
|
||||||
|
|
||||||
private var shareButtonNode: HighlightableButtonNode?
|
private var shareButtonNode: ChatMessageShareButton?
|
||||||
|
|
||||||
private let messageAccessibilityArea: AccessibilityAreaNode
|
private let messageAccessibilityArea: AccessibilityAreaNode
|
||||||
|
|
||||||
@ -1068,8 +1068,6 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
|
|
||||||
let mosaicStatusLayout = ChatMessageDateAndStatusNode.asyncLayout(self.mosaicStatusNode)
|
let mosaicStatusLayout = ChatMessageDateAndStatusNode.asyncLayout(self.mosaicStatusNode)
|
||||||
|
|
||||||
let currentShareButtonNode = self.shareButtonNode
|
|
||||||
|
|
||||||
let layoutConstants = self.layoutConstants
|
let layoutConstants = self.layoutConstants
|
||||||
|
|
||||||
let currentItem = self.appliedItem
|
let currentItem = self.appliedItem
|
||||||
@ -1089,7 +1087,6 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
replyInfoLayout: replyInfoLayout,
|
replyInfoLayout: replyInfoLayout,
|
||||||
actionButtonsLayout: actionButtonsLayout,
|
actionButtonsLayout: actionButtonsLayout,
|
||||||
mosaicStatusLayout: mosaicStatusLayout,
|
mosaicStatusLayout: mosaicStatusLayout,
|
||||||
currentShareButtonNode: currentShareButtonNode,
|
|
||||||
layoutConstants: layoutConstants,
|
layoutConstants: layoutConstants,
|
||||||
currentItem: currentItem,
|
currentItem: currentItem,
|
||||||
currentForwardInfo: currentForwardInfo,
|
currentForwardInfo: currentForwardInfo,
|
||||||
@ -1106,7 +1103,6 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
replyInfoLayout: (ChatPresentationData, PresentationStrings, AccountContext, ChatMessageReplyInfoType, Message, CGSize) -> (CGSize, () -> ChatMessageReplyInfoNode),
|
replyInfoLayout: (ChatPresentationData, PresentationStrings, AccountContext, ChatMessageReplyInfoType, Message, CGSize) -> (CGSize, () -> ChatMessageReplyInfoNode),
|
||||||
actionButtonsLayout: (AccountContext, ChatPresentationThemeData, PresentationChatBubbleCorners, PresentationStrings, ReplyMarkupMessageAttribute, Message, CGFloat) -> (minWidth: CGFloat, layout: (CGFloat) -> (CGSize, (Bool) -> ChatMessageActionButtonsNode)),
|
actionButtonsLayout: (AccountContext, ChatPresentationThemeData, PresentationChatBubbleCorners, PresentationStrings, ReplyMarkupMessageAttribute, Message, CGFloat) -> (minWidth: CGFloat, layout: (CGFloat) -> (CGSize, (Bool) -> ChatMessageActionButtonsNode)),
|
||||||
mosaicStatusLayout: (AccountContext, ChatPresentationData, Bool, Int?, String, ChatMessageDateAndStatusType, CGSize, [MessageReaction], Int, Bool, Bool) -> (CGSize, (Bool) -> ChatMessageDateAndStatusNode),
|
mosaicStatusLayout: (AccountContext, ChatPresentationData, Bool, Int?, String, ChatMessageDateAndStatusType, CGSize, [MessageReaction], Int, Bool, Bool) -> (CGSize, (Bool) -> ChatMessageDateAndStatusNode),
|
||||||
currentShareButtonNode: HighlightableButtonNode?,
|
|
||||||
layoutConstants: ChatMessageItemLayoutConstants,
|
layoutConstants: ChatMessageItemLayoutConstants,
|
||||||
currentItem: ChatMessageItem?,
|
currentItem: ChatMessageItem?,
|
||||||
currentForwardInfo: (Peer?, String?)?,
|
currentForwardInfo: (Peer?, String?)?,
|
||||||
@ -2155,38 +2151,6 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
layoutInsets.top += layoutConstants.timestampHeaderHeight
|
layoutInsets.top += layoutConstants.timestampHeaderHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
var updatedShareButtonBackground: UIImage?
|
|
||||||
|
|
||||||
var updatedShareButtonNode: HighlightableButtonNode?
|
|
||||||
if needShareButton {
|
|
||||||
if currentShareButtonNode != nil {
|
|
||||||
updatedShareButtonNode = currentShareButtonNode
|
|
||||||
if item.presentationData.theme !== currentItem?.presentationData.theme {
|
|
||||||
let graphics = PresentationResourcesChat.additionalGraphics(item.presentationData.theme.theme, wallpaper: item.presentationData.theme.wallpaper, bubbleCorners: item.presentationData.chatBubbleCorners)
|
|
||||||
if case .pinnedMessages = item.associatedData.subject {
|
|
||||||
updatedShareButtonBackground = graphics.chatBubbleNavigateButtonImage
|
|
||||||
} else if item.message.id.peerId.isRepliesOrSavedMessages(accountPeerId: item.context.account.peerId) {
|
|
||||||
updatedShareButtonBackground = graphics.chatBubbleNavigateButtonImage
|
|
||||||
} else {
|
|
||||||
updatedShareButtonBackground = graphics.chatBubbleShareButtonImage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let buttonNode = HighlightableButtonNode()
|
|
||||||
let buttonIcon: UIImage?
|
|
||||||
let graphics = PresentationResourcesChat.additionalGraphics(item.presentationData.theme.theme, wallpaper: item.presentationData.theme.wallpaper, bubbleCorners: item.presentationData.chatBubbleCorners)
|
|
||||||
if case .pinnedMessages = item.associatedData.subject {
|
|
||||||
buttonIcon = graphics.chatBubbleNavigateButtonImage
|
|
||||||
} else if item.message.id.peerId.isRepliesOrSavedMessages(accountPeerId: item.context.account.peerId) {
|
|
||||||
buttonIcon = graphics.chatBubbleNavigateButtonImage
|
|
||||||
} else {
|
|
||||||
buttonIcon = graphics.chatBubbleShareButtonImage
|
|
||||||
}
|
|
||||||
buttonNode.setBackgroundImage(buttonIcon, for: [.normal])
|
|
||||||
updatedShareButtonNode = buttonNode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let layout = ListViewItemNodeLayout(contentSize: layoutSize, insets: layoutInsets)
|
let layout = ListViewItemNodeLayout(contentSize: layoutSize, insets: layoutInsets)
|
||||||
|
|
||||||
let graphics = PresentationResourcesChat.principalGraphics(theme: item.presentationData.theme.theme, wallpaper: item.presentationData.theme.wallpaper, bubbleCorners: item.presentationData.chatBubbleCorners)
|
let graphics = PresentationResourcesChat.principalGraphics(theme: item.presentationData.theme.theme, wallpaper: item.presentationData.theme.wallpaper, bubbleCorners: item.presentationData.chatBubbleCorners)
|
||||||
@ -2241,8 +2205,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
contentContainerNodeFrames: contentContainerNodeFrames,
|
contentContainerNodeFrames: contentContainerNodeFrames,
|
||||||
mosaicStatusOrigin: mosaicStatusOrigin,
|
mosaicStatusOrigin: mosaicStatusOrigin,
|
||||||
mosaicStatusSizeAndApply: mosaicStatusSizeAndApply,
|
mosaicStatusSizeAndApply: mosaicStatusSizeAndApply,
|
||||||
updatedShareButtonNode: updatedShareButtonNode,
|
needsShareButton: needShareButton
|
||||||
updatedShareButtonBackground: updatedShareButtonBackground
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -2282,8 +2245,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
contentContainerNodeFrames: [(UInt32, CGRect, Bool?, CGFloat)],
|
contentContainerNodeFrames: [(UInt32, CGRect, Bool?, CGFloat)],
|
||||||
mosaicStatusOrigin: CGPoint?,
|
mosaicStatusOrigin: CGPoint?,
|
||||||
mosaicStatusSizeAndApply: (CGSize, (Bool) -> ChatMessageDateAndStatusNode)?,
|
mosaicStatusSizeAndApply: (CGSize, (Bool) -> ChatMessageDateAndStatusNode)?,
|
||||||
updatedShareButtonNode: HighlightableButtonNode?,
|
needsShareButton: Bool
|
||||||
updatedShareButtonBackground: UIImage?
|
|
||||||
) -> Void {
|
) -> Void {
|
||||||
guard let strongSelf = selfReference.value else {
|
guard let strongSelf = selfReference.value else {
|
||||||
return
|
return
|
||||||
@ -2738,21 +2700,17 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
mosaicStatusNode.removeFromSupernode()
|
mosaicStatusNode.removeFromSupernode()
|
||||||
}
|
}
|
||||||
|
|
||||||
if let updatedShareButtonNode = updatedShareButtonNode {
|
if needsShareButton {
|
||||||
if updatedShareButtonNode !== strongSelf.shareButtonNode {
|
if strongSelf.shareButtonNode == nil {
|
||||||
if let shareButtonNode = strongSelf.shareButtonNode {
|
let shareButtonNode = ChatMessageShareButton()
|
||||||
shareButtonNode.removeFromSupernode()
|
strongSelf.shareButtonNode = shareButtonNode
|
||||||
}
|
strongSelf.insertSubnode(shareButtonNode, belowSubnode: strongSelf.messageAccessibilityArea)
|
||||||
strongSelf.shareButtonNode = updatedShareButtonNode
|
shareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside)
|
||||||
strongSelf.insertSubnode(updatedShareButtonNode, belowSubnode: strongSelf.messageAccessibilityArea)
|
|
||||||
updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside)
|
|
||||||
}
|
|
||||||
if let updatedShareButtonBackground = updatedShareButtonBackground {
|
|
||||||
strongSelf.shareButtonNode?.setBackgroundImage(updatedShareButtonBackground, for: [.normal])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if let shareButtonNode = strongSelf.shareButtonNode {
|
} else if let shareButtonNode = strongSelf.shareButtonNode {
|
||||||
shareButtonNode.removeFromSupernode()
|
|
||||||
strongSelf.shareButtonNode = nil
|
strongSelf.shareButtonNode = nil
|
||||||
|
shareButtonNode.removeFromSupernode()
|
||||||
}
|
}
|
||||||
|
|
||||||
if case .System = animation, !strongSelf.mainContextSourceNode.isExtractedToContextPreview {
|
if case .System = animation, !strongSelf.mainContextSourceNode.isExtractedToContextPreview {
|
||||||
@ -2761,7 +2719,8 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
}
|
}
|
||||||
if let shareButtonNode = strongSelf.shareButtonNode {
|
if let shareButtonNode = strongSelf.shareButtonNode {
|
||||||
let currentBackgroundFrame = strongSelf.backgroundNode.frame
|
let currentBackgroundFrame = strongSelf.backgroundNode.frame
|
||||||
shareButtonNode.frame = CGRect(origin: CGPoint(x: currentBackgroundFrame.maxX + 8.0, y: currentBackgroundFrame.maxY - 30.0), size: CGSize(width: 29.0, height: 29.0))
|
let buttonSize = shareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, subject: item.associatedData.subject, message: item.message, account: item.context.account)
|
||||||
|
shareButtonNode.frame = CGRect(origin: CGPoint(x: currentBackgroundFrame.maxX + 8.0, y: currentBackgroundFrame.maxY - buttonSize.width - 1.0), size: buttonSize)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if let _ = strongSelf.backgroundFrameTransition {
|
if let _ = strongSelf.backgroundFrameTransition {
|
||||||
@ -2770,7 +2729,8 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
}
|
}
|
||||||
strongSelf.messageAccessibilityArea.frame = backgroundFrame
|
strongSelf.messageAccessibilityArea.frame = backgroundFrame
|
||||||
if let shareButtonNode = strongSelf.shareButtonNode {
|
if let shareButtonNode = strongSelf.shareButtonNode {
|
||||||
shareButtonNode.frame = CGRect(origin: CGPoint(x: backgroundFrame.maxX + 8.0, y: backgroundFrame.maxY - 30.0), size: CGSize(width: 29.0, height: 29.0))
|
let buttonSize = shareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, subject: item.associatedData.subject, message: item.message, account: item.context.account)
|
||||||
|
shareButtonNode.frame = CGRect(origin: CGPoint(x: backgroundFrame.maxX + 8.0, y: backgroundFrame.maxY - buttonSize.width - 1.0), size: buttonSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
if case .System = animation, strongSelf.mainContextSourceNode.isExtractedToContextPreview {
|
if case .System = animation, strongSelf.mainContextSourceNode.isExtractedToContextPreview {
|
||||||
@ -2963,8 +2923,9 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode
|
|||||||
}
|
}
|
||||||
self.messageAccessibilityArea.frame = backgroundFrame
|
self.messageAccessibilityArea.frame = backgroundFrame
|
||||||
|
|
||||||
if let shareButtonNode = self.shareButtonNode {
|
if let item = self.item, let shareButtonNode = self.shareButtonNode {
|
||||||
shareButtonNode.frame = CGRect(origin: CGPoint(x: backgroundFrame.maxX + 8.0, y: backgroundFrame.maxY - 30.0), size: CGSize(width: 29.0, height: 29.0))
|
let buttonSize = shareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, subject: item.associatedData.subject, message: item.message, account: item.context.account)
|
||||||
|
shareButtonNode.frame = CGRect(origin: CGPoint(x: backgroundFrame.maxX + 8.0, y: backgroundFrame.maxY - buttonSize.width - 1.0), size: buttonSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
if CGFloat(1.0).isLessThanOrEqualTo(progress) {
|
if CGFloat(1.0).isLessThanOrEqualTo(progress) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user