Various fixes

This commit is contained in:
Ilya Laktyushin 2024-08-13 13:16:43 +02:00
parent 42de4756aa
commit fd5e1022e7
2 changed files with 31 additions and 5 deletions

View File

@ -55,7 +55,8 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
self.file = file self.file = file
self.pdfView = PDFView() self.pdfView = PDFView()
self.pdfView.clipsToBounds = false
var scrollView: UIScrollView? var scrollView: UIScrollView?
for view in self.pdfView.subviews { for view in self.pdfView.subviews {
if let view = view as? UIScrollView { if let view = view as? UIScrollView {
@ -69,6 +70,7 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
} }
} }
self.scrollView = scrollView self.scrollView = scrollView
scrollView?.clipsToBounds = false
self.pdfView.displayDirection = .vertical self.pdfView.displayDirection = .vertical
self.pdfView.autoScales = true self.pdfView.autoScales = true
@ -296,7 +298,14 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
self.previousScrollingOffset = ScrollingOffsetState(value: self.scrollView.contentOffset.y, isDraggingOrDecelerating: self.scrollView.isDragging || self.scrollView.isDecelerating) self.previousScrollingOffset = ScrollingOffsetState(value: self.scrollView.contentOffset.y, isDraggingOrDecelerating: self.scrollView.isDragging || self.scrollView.isDecelerating)
let pdfViewFrame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: CGSize(width: size.width - insets.left - insets.right, height: size.height - insets.top - insets.bottom)) let currentBounds = self.scrollView.bounds
let offsetToBottomEdge = max(0.0, self.scrollView.contentSize.height - currentBounds.maxY)
var bottomInset = insets.bottom
if offsetToBottomEdge < 128.0 {
bottomInset = fullInsets.bottom
}
let pdfViewFrame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: CGSize(width: size.width - insets.left - insets.right, height: size.height - insets.top - bottomInset))
transition.setFrame(view: self.pdfView, frame: pdfViewFrame) transition.setFrame(view: self.pdfView, frame: pdfViewFrame)
if isFirstTime { if isFirstTime {
@ -370,6 +379,10 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
} }
if !decelerate { if !decelerate {
self.snapScrollingOffsetToInsets() self.snapScrollingOffsetToInsets()
if self.ignoreUpdatesUntilScrollingStopped {
self.ignoreUpdatesUntilScrollingStopped = false
}
} }
} }
@ -378,9 +391,16 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
scrollViewDelegate.scrollViewDidEndDecelerating?(scrollView) scrollViewDelegate.scrollViewDidEndDecelerating?(scrollView)
} }
self.snapScrollingOffsetToInsets() self.snapScrollingOffsetToInsets()
if self.ignoreUpdatesUntilScrollingStopped {
self.ignoreUpdatesUntilScrollingStopped = false
}
} }
private func updateScrollingOffset(isReset: Bool, transition: ComponentTransition) { private func updateScrollingOffset(isReset: Bool, transition: ComponentTransition) {
guard !self.ignoreUpdatesUntilScrollingStopped else {
return
}
guard let scrollView = self.scrollView else { guard let scrollView = self.scrollView else {
return return
} }
@ -412,8 +432,12 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
} }
} }
private var ignoreUpdatesUntilScrollingStopped = false
func resetScrolling() { func resetScrolling() {
self.updateScrollingOffset(isReset: true, transition: .spring(duration: 0.4)) self.updateScrollingOffset(isReset: true, transition: .spring(duration: 0.4))
if self.scrollView.isDecelerating {
self.ignoreUpdatesUntilScrollingStopped = true
}
} }
private func open(url: String, new: Bool) { private func open(url: String, new: Bool) {

View File

@ -65,7 +65,7 @@ func resolveMissingStickerSets(network: Network, postbox: Postbox, stickerSets:
var missingSignals: [Signal<(Int, Api.StickerSetCovered)?, NoError>] = [] var missingSignals: [Signal<(Int, Api.StickerSetCovered)?, NoError>] = []
for i in 0 ..< stickerSets.count { for i in 0 ..< stickerSets.count {
switch stickerSets[i] { switch stickerSets[i] {
case let .stickerSetNoCovered(value): case let .stickerSetNoCovered(value), let .stickerSetCovered(value, _):
switch value { switch value {
case let .stickerSet(_, _, id, accessHash, _, _, _, _, _, _, _, hash): case let .stickerSet(_, _, id, accessHash, _, _, _, _, _, _, _, hash):
if ignorePacksWithHashes[id] == hash { if ignorePacksWithHashes[id] == hash {
@ -143,7 +143,7 @@ func updatedFeaturedStickerPacks(network: Network, postbox: Postbox, category: F
case .featuredStickersNotModified: case .featuredStickersNotModified:
return .single(.notModified) return .single(.notModified)
case let .featuredStickers(flags, _, _, sets, unread): case let .featuredStickers(flags, _, _, sets, unread):
return resolveMissingStickerSets(network: network, postbox: postbox, stickerSets: sets, ignorePacksWithHashes: initialPackMap.mapValues({ item in return resolveMissingStickerSets(network: network, postbox: postbox, stickerSets: sets, ignorePacksWithHashes: initialPackMap.filter { $0.value.topItems.count > 1 }.mapValues({ item in
item.info.hash item.info.hash
})) }))
|> castError(MTRpcError.self) |> castError(MTRpcError.self)
@ -153,8 +153,10 @@ func updatedFeaturedStickerPacks(network: Network, postbox: Postbox, category: F
for set in sets { for set in sets {
var (info, items) = parsePreviewStickerSet(set, namespace: category.collectionIdNamespace) var (info, items) = parsePreviewStickerSet(set, namespace: category.collectionIdNamespace)
if let previousPack = initialPackMap[info.id.id] { if let previousPack = initialPackMap[info.id.id] {
if previousPack.info.hash == info.hash { if previousPack.info.hash == info.hash, previousPack.topItems.count > 1 {
items = previousPack.topItems items = previousPack.topItems
} else {
items = Array(items.prefix(5))
} }
} }
updatedPacks.append(FeaturedStickerPackItem(info: info, topItems: items, unread: unreadIds.contains(info.id.id))) updatedPacks.append(FeaturedStickerPackItem(info: info, topItems: items, unread: unreadIds.contains(info.id.id)))