mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
1fe61926ae
commit
ae69b249b4
@ -255,7 +255,7 @@ public class PremiumLimitDisplayComponent: Component {
|
|||||||
|
|
||||||
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
|
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
|
||||||
rotateAnimation.fromValue = 0.0 as NSNumber
|
rotateAnimation.fromValue = 0.0 as NSNumber
|
||||||
rotateAnimation.toValue = -0.38 as NSNumber
|
rotateAnimation.toValue = -0.3 as NSNumber
|
||||||
rotateAnimation.duration = 0.15
|
rotateAnimation.duration = 0.15
|
||||||
rotateAnimation.fillMode = .forwards
|
rotateAnimation.fillMode = .forwards
|
||||||
rotateAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)
|
rotateAnimation.timingFunction = CAMediaTimingFunction(name: .easeOut)
|
||||||
@ -264,7 +264,7 @@ public class PremiumLimitDisplayComponent: Component {
|
|||||||
|
|
||||||
Queue.mainQueue().after(0.5, {
|
Queue.mainQueue().after(0.5, {
|
||||||
let bounceAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
|
let bounceAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
|
||||||
bounceAnimation.fromValue = -0.38 as NSNumber
|
bounceAnimation.fromValue = -0.3 as NSNumber
|
||||||
bounceAnimation.toValue = 0.05 as NSNumber
|
bounceAnimation.toValue = 0.05 as NSNumber
|
||||||
bounceAnimation.duration = 0.15
|
bounceAnimation.duration = 0.15
|
||||||
bounceAnimation.fillMode = .forwards
|
bounceAnimation.fillMode = .forwards
|
||||||
|
@ -370,6 +370,7 @@ public final class MediaEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.audioDelayTimer?.invalidate()
|
self.audioDelayTimer?.invalidate()
|
||||||
|
self.audioDelayTimer = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
public func replaceSource(_ image: UIImage, additionalImage: UIImage?, time: CMTime) {
|
public func replaceSource(_ image: UIImage, additionalImage: UIImage?, time: CMTime) {
|
||||||
@ -1066,7 +1067,12 @@ public final class MediaEditor {
|
|||||||
if let audioPlayer = self.audioPlayer {
|
if let audioPlayer = self.audioPlayer {
|
||||||
audioPlayer.pause()
|
audioPlayer.pause()
|
||||||
|
|
||||||
|
if self.sourceIsVideo {
|
||||||
|
self.audioDelayTimer?.invalidate()
|
||||||
|
self.audioDelayTimer = nil
|
||||||
|
} else {
|
||||||
self.destroyTimeObservers()
|
self.destroyTimeObservers()
|
||||||
|
}
|
||||||
self.audioPlayer = nil
|
self.audioPlayer = nil
|
||||||
|
|
||||||
if !self.sourceIsVideo {
|
if !self.sourceIsVideo {
|
||||||
|
@ -2096,7 +2096,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mediaEditor = MediaEditor(context: self.context, subject: subject.editorSubject, values: initialValues, hasHistogram: true)
|
let mediaEditor = MediaEditor(context: self.context, subject: subject.editorSubject, values: initialValues, hasHistogram: true)
|
||||||
if let initialVideoPosition = self.controller?.initialVideoPosition {
|
if let initialVideoPosition = controller.initialVideoPosition {
|
||||||
mediaEditor.seek(initialVideoPosition, andPlay: true)
|
mediaEditor.seek(initialVideoPosition, andPlay: true)
|
||||||
}
|
}
|
||||||
mediaEditor.attachPreviewView(self.previewView)
|
mediaEditor.attachPreviewView(self.previewView)
|
||||||
@ -2157,7 +2157,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
Queue.mainQueue().async {
|
Queue.mainQueue().async {
|
||||||
self.gradientView.image = gradientImage
|
self.gradientView.image = gradientImage
|
||||||
|
|
||||||
if self.controller?.isEditingStory == true && subject.isVideo {
|
if self.controller?.isEditingStory == true {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
self.previewContainerView.alpha = 1.0
|
self.previewContainerView.alpha = 1.0
|
||||||
@ -2178,11 +2178,20 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
self.mediaEditor = mediaEditor
|
self.mediaEditor = mediaEditor
|
||||||
self.mediaEditorPromise.set(.single(mediaEditor))
|
self.mediaEditorPromise.set(.single(mediaEditor))
|
||||||
|
|
||||||
if self.controller?.isEditingStory == true && subject.isVideo {
|
if controller.isEditingStory == true {
|
||||||
mediaEditor.onFirstDisplay = { [weak self] in
|
mediaEditor.onFirstDisplay = { [weak self] in
|
||||||
if let self {
|
if let self {
|
||||||
|
if subject.isPhoto {
|
||||||
|
self.previewContainerView.layer.allowsGroupOpacity = true
|
||||||
|
self.previewContainerView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25, completion: { _ in
|
||||||
|
self.previewContainerView.layer.allowsGroupOpacity = false
|
||||||
self.previewContainerView.alpha = 1.0
|
self.previewContainerView.alpha = 1.0
|
||||||
self.backgroundDimView.isHidden = false
|
self.backgroundDimView.isHidden = false
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
self.previewContainerView.alpha = 1.0
|
||||||
|
self.backgroundDimView.isHidden = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3177,14 +3186,27 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func maybeFixMisencodedText(_ text: String) -> String {
|
||||||
|
let charactersToSearchFor = CharacterSet(charactersIn: "àåèîóûþÿ")
|
||||||
|
if text.lowercased().rangeOfCharacter(from: charactersToSearchFor) != nil {
|
||||||
|
if let data = text.data(using: .windowsCP1252), let string = String(data: data, encoding: .windowsCP1251) {
|
||||||
|
return string
|
||||||
|
} else {
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var artist: String?
|
var artist: String?
|
||||||
var title: String?
|
var title: String?
|
||||||
for data in audioAsset.commonMetadata {
|
for data in audioAsset.commonMetadata {
|
||||||
if data.commonKey == .commonKeyArtist {
|
if data.commonKey == .commonKeyArtist, let value = data.stringValue {
|
||||||
artist = data.stringValue
|
artist = maybeFixMisencodedText(value)
|
||||||
}
|
}
|
||||||
if data.commonKey == .commonKeyTitle {
|
if data.commonKey == .commonKeyTitle, let value = data.stringValue {
|
||||||
title = data.stringValue
|
title = maybeFixMisencodedText(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,7 +643,9 @@ final class VideoScrubberComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let audioTitle = NSAttributedString(string: trackTitle, font: Font.semibold(13.0), textColor: .white)
|
let audioTitle = NSAttributedString(string: trackTitle, font: Font.semibold(13.0), textColor: .white)
|
||||||
let audioTitleSize = self.audioTitle.update(
|
let audioTitleSize: CGSize
|
||||||
|
if !trackTitle.isEmpty {
|
||||||
|
audioTitleSize = self.audioTitle.update(
|
||||||
transition: transition,
|
transition: transition,
|
||||||
component: AnyComponent(
|
component: AnyComponent(
|
||||||
MultilineTextComponent(
|
MultilineTextComponent(
|
||||||
@ -653,16 +655,27 @@ final class VideoScrubberComponent: Component {
|
|||||||
environment: {},
|
environment: {},
|
||||||
containerSize: availableSize
|
containerSize: availableSize
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
if let audioTitleView = self.audioTitle.view {
|
||||||
|
audioTitleSize = audioTitleView.bounds.size
|
||||||
|
} else {
|
||||||
|
audioTitleSize = .zero
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let spacing: CGFloat = 4.0
|
let spacing: CGFloat = 4.0
|
||||||
let iconSize = CGSize(width: 14.0, height: 14.0)
|
let iconSize = CGSize(width: 14.0, height: 14.0)
|
||||||
let contentTotalWidth = iconSize.width + audioTitleSize.width + spacing
|
let contentTotalWidth = iconSize.width + audioTitleSize.width + spacing
|
||||||
|
|
||||||
|
var audioContentTransition = audioTransition
|
||||||
|
if animateAudioAppearance, component.audioData != nil {
|
||||||
|
audioContentTransition = .immediate
|
||||||
|
}
|
||||||
audioTransition.setAlpha(view: self.audioIconView, alpha: self.isAudioSelected ? 0.0 : 1.0)
|
audioTransition.setAlpha(view: self.audioIconView, alpha: self.isAudioSelected ? 0.0 : 1.0)
|
||||||
|
|
||||||
let audioIconFrame = CGRect(origin: CGPoint(x: max(8.0, floorToScreenPixels((deselectedAudioClipWidth - contentTotalWidth) / 2.0)), y: floorToScreenPixels((audioScrubberHeight - iconSize.height) / 2.0)), size: iconSize)
|
let audioIconFrame = CGRect(origin: CGPoint(x: max(8.0, floorToScreenPixels((deselectedAudioClipWidth - contentTotalWidth) / 2.0)), y: floorToScreenPixels((audioScrubberHeight - iconSize.height) / 2.0)), size: iconSize)
|
||||||
audioTransition.setBounds(view: self.audioIconView, bounds: CGRect(origin: .zero, size: audioIconFrame.size))
|
audioContentTransition.setBounds(view: self.audioIconView, bounds: CGRect(origin: .zero, size: audioIconFrame.size))
|
||||||
audioTransition.setPosition(view: self.audioIconView, position: audioIconFrame.center)
|
audioContentTransition.setPosition(view: self.audioIconView, position: audioIconFrame.center)
|
||||||
|
|
||||||
let trackTitleIsVisible = !self.isAudioSelected && !component.audioOnly && !trackTitle.isEmpty
|
let trackTitleIsVisible = !self.isAudioSelected && !component.audioOnly && !trackTitle.isEmpty
|
||||||
if let view = self.audioTitle.view {
|
if let view = self.audioTitle.view {
|
||||||
@ -677,7 +690,7 @@ final class VideoScrubberComponent: Component {
|
|||||||
|
|
||||||
let audioTitleFrame = CGRect(origin: CGPoint(x: audioIconFrame.maxX + spacing, y: floorToScreenPixels((audioScrubberHeight - audioTitleSize.height) / 2.0)), size: audioTitleSize)
|
let audioTitleFrame = CGRect(origin: CGPoint(x: audioIconFrame.maxX + spacing, y: floorToScreenPixels((audioScrubberHeight - audioTitleSize.height) / 2.0)), size: audioTitleSize)
|
||||||
view.bounds = CGRect(origin: .zero, size: audioTitleFrame.size)
|
view.bounds = CGRect(origin: .zero, size: audioTitleFrame.size)
|
||||||
audioTransition.setPosition(view: view, position: audioTitleFrame.center)
|
audioContentTransition.setPosition(view: view, position: audioTitleFrame.center)
|
||||||
}
|
}
|
||||||
audioTransition.setAlpha(view: self.audioIconView, alpha: trackTitleIsVisible ? 1.0 : 0.0)
|
audioTransition.setAlpha(view: self.audioIconView, alpha: trackTitleIsVisible ? 1.0 : 0.0)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user