mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-03-06 16:30:55 +00:00
[WIP] Stories
This commit is contained in:
@@ -65,6 +65,8 @@ final class MediaNavigationStripComponent: Component {
|
||||
final class View: UIView {
|
||||
private var visibleItems: [Int: ItemLayer] = [:]
|
||||
|
||||
private var component: MediaNavigationStripComponent?
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
@@ -76,7 +78,21 @@ final class MediaNavigationStripComponent: Component {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
func updateCurrentItemProgress(value: CGFloat, transition: Transition) {
|
||||
guard let component = self.component else {
|
||||
return
|
||||
}
|
||||
guard let itemLayer = self.visibleItems[component.index] else {
|
||||
return
|
||||
}
|
||||
|
||||
let itemFrame = itemLayer.bounds
|
||||
transition.setFrame(layer: itemLayer.foregroundLayer, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: value * itemFrame.width, height: itemFrame.height)))
|
||||
}
|
||||
|
||||
func update(component: MediaNavigationStripComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<EnvironmentType>, transition: Transition) -> CGSize {
|
||||
self.component = component
|
||||
|
||||
let spacing: CGFloat = 3.0
|
||||
let itemHeight: CGFloat = 2.0
|
||||
let minItemWidth: CGFloat = 10.0
|
||||
@@ -103,10 +119,6 @@ final class MediaNavigationStripComponent: Component {
|
||||
globalOffset = 0.0
|
||||
}
|
||||
|
||||
//itemWidth * itemCount + (itemCount - 1) * spacing = width
|
||||
//itemWidth * itemCount + itemCount * spacing - spacing = width
|
||||
//itemCount * (itemWidth + spacing) = width + spacing
|
||||
//itemCount = (width + spacing) / (itemWidth + spacing)
|
||||
let potentiallyVisibleCount = Int(ceil((availableSize.width + spacing) / (itemWidth + spacing)))
|
||||
for i in (component.index - potentiallyVisibleCount) ... (component.index + potentiallyVisibleCount) {
|
||||
if i < 0 {
|
||||
|
||||
@@ -291,14 +291,9 @@ private final class StoryContainerScreenComponent: Component {
|
||||
}
|
||||
visibleItem.currentProgress = progress
|
||||
|
||||
let _ = self.navigationStrip.updateEnvironment(
|
||||
transition: .immediate,
|
||||
environment: {
|
||||
MediaNavigationStripComponent.EnvironmentType(
|
||||
currentProgress: progress
|
||||
)
|
||||
}
|
||||
)
|
||||
if let navigationStripView = self.navigationStrip.view as? MediaNavigationStripComponent.View {
|
||||
navigationStripView.updateCurrentItemProgress(value: progress, transition: .immediate)
|
||||
}
|
||||
if progress >= 1.0 && !visibleItem.requestedNext {
|
||||
visibleItem.requestedNext = true
|
||||
|
||||
|
||||
@@ -11,6 +11,11 @@ public final class StoryContentItem {
|
||||
}
|
||||
}
|
||||
|
||||
open class View: UIView {
|
||||
func setIsProgressPaused(_ isProgressPaused: Bool) {
|
||||
}
|
||||
}
|
||||
|
||||
public final class Environment: Equatable {
|
||||
public let externalState: ExternalState
|
||||
public let presentationProgressUpdated: (Double) -> Void
|
||||
|
||||
@@ -82,7 +82,7 @@ final class StoryMessageContentComponent: Component {
|
||||
return fetchSignal ?? .complete()
|
||||
}
|
||||
|
||||
final class View: UIView {
|
||||
final class View: StoryContentItem.View {
|
||||
private let imageNode: TransformImageNode
|
||||
private var videoNode: UniversalVideoNode?
|
||||
|
||||
@@ -140,6 +140,10 @@ final class StoryMessageContentComponent: Component {
|
||||
),
|
||||
priority: .gallery
|
||||
)
|
||||
|
||||
self.videoNode = videoNode
|
||||
self.addSubnode(videoNode)
|
||||
|
||||
videoNode.ownsContentNodeUpdated = { [weak self] value in
|
||||
guard let self else {
|
||||
return
|
||||
@@ -150,8 +154,6 @@ final class StoryMessageContentComponent: Component {
|
||||
}
|
||||
}
|
||||
videoNode.canAttachContent = true
|
||||
self.videoNode = videoNode
|
||||
self.addSubnode(videoNode)
|
||||
if update {
|
||||
self.state?.updated(transition: .immediate)
|
||||
}
|
||||
@@ -159,6 +161,9 @@ final class StoryMessageContentComponent: Component {
|
||||
}
|
||||
}
|
||||
|
||||
func setIsProgressPaused(_ isProgressPaused: Bool) {
|
||||
}
|
||||
|
||||
func update(component: StoryMessageContentComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<StoryContentItem.Environment>, transition: Transition) -> CGSize {
|
||||
self.component = component
|
||||
self.state = state
|
||||
|
||||
Reference in New Issue
Block a user