mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Search filter fixes
This commit is contained in:
parent
95a6190111
commit
84efd043c1
@ -353,14 +353,25 @@ final class ChatListSearchFiltersContainerNode: ASDisplayNode {
|
|||||||
|
|
||||||
let paneFrame = CGRect(origin: CGPoint(x: leftOffset, y: floor((size.height - paneNodeSize.height) / 2.0) + verticalOffset), size: paneNodeSize)
|
let paneFrame = CGRect(origin: CGPoint(x: leftOffset, y: floor((size.height - paneNodeSize.height) / 2.0) + verticalOffset), size: paneNodeSize)
|
||||||
|
|
||||||
if wasAdded {
|
var effectiveWasAdded = wasAdded
|
||||||
|
if !effectiveWasAdded && !self.bounds.intersects(self.scrollNode.convert(paneNode.frame, to: self)) && self.bounds.intersects(self.scrollNode.convert(paneFrame, to: self)) {
|
||||||
|
effectiveWasAdded = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if effectiveWasAdded {
|
||||||
paneNode.frame = paneFrame
|
paneNode.frame = paneFrame
|
||||||
paneNode.alpha = 0.0
|
paneNode.alpha = 0.0
|
||||||
paneNode.subnodeTransform = CATransform3DMakeScale(0.1, 0.1, 1.0)
|
paneNode.subnodeTransform = CATransform3DMakeScale(0.1, 0.1, 1.0)
|
||||||
itemNodeTransition.updateSublayerTransformScale(node: paneNode, scale: 1.0)
|
itemNodeTransition.updateSublayerTransformScale(node: paneNode, scale: 1.0)
|
||||||
itemNodeTransition.updateAlpha(node: paneNode, alpha: 1.0)
|
itemNodeTransition.updateAlpha(node: paneNode, alpha: 1.0)
|
||||||
} else {
|
} else {
|
||||||
|
if self.bounds.intersects(self.scrollNode.convert(paneFrame, to: self)) {
|
||||||
itemNodeTransition.updateFrameAdditive(node: paneNode, frame: paneFrame)
|
itemNodeTransition.updateFrameAdditive(node: paneNode, frame: paneFrame)
|
||||||
|
} else {
|
||||||
|
paneNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.4) { [weak paneNode] _ in
|
||||||
|
paneNode?.frame = paneFrame
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
paneNode.updateArea(size: paneFrame.size, sideInset: spacing / 2.0, transition: itemNodeTransition)
|
paneNode.updateArea(size: paneFrame.size, sideInset: spacing / 2.0, transition: itemNodeTransition)
|
||||||
|
@ -44,8 +44,8 @@ final class GalleryTitleView: UIView, NavigationBarTitleView {
|
|||||||
let leftInset: CGFloat = 0.0
|
let leftInset: CGFloat = 0.0
|
||||||
let rightInset: CGFloat = 0.0
|
let rightInset: CGFloat = 0.0
|
||||||
|
|
||||||
let authorNameSize = self.authorNameNode.measure(CGSize(width: size.width - 44.0 * 2.0 - 8.0 * 2.0 - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude))
|
let authorNameSize = self.authorNameNode.measure(CGSize(width: size.width - 8.0 * 2.0 - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude))
|
||||||
let dateSize = self.dateNode.measure(CGSize(width: size.width - 44.0 * 2.0 - 8.0 * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
let dateSize = self.dateNode.measure(CGSize(width: size.width - 8.0 * 2.0, height: CGFloat.greatestFiniteMagnitude))
|
||||||
|
|
||||||
if authorNameSize.height.isZero {
|
if authorNameSize.height.isZero {
|
||||||
self.dateNode.frame = CGRect(origin: CGPoint(x: floor((size.width - dateSize.width) / 2.0), y: floor((size.height - dateSize.height) / 2.0)), size: dateSize)
|
self.dateNode.frame = CGRect(origin: CGPoint(x: floor((size.width - dateSize.width) / 2.0), y: floor((size.height - dateSize.height) / 2.0)), size: dateSize)
|
||||||
|
@ -70,6 +70,7 @@ private final class TokenNode: ASDisplayNode {
|
|||||||
self.theme = theme
|
self.theme = theme
|
||||||
self.token = token
|
self.token = token
|
||||||
self.containerNode = ASDisplayNode()
|
self.containerNode = ASDisplayNode()
|
||||||
|
self.containerNode.clipsToBounds = true
|
||||||
self.iconNode = ASImageNode()
|
self.iconNode = ASImageNode()
|
||||||
self.iconNode.displaysAsynchronously = false
|
self.iconNode.displaysAsynchronously = false
|
||||||
self.iconNode.displayWithoutProcessing = true
|
self.iconNode.displayWithoutProcessing = true
|
||||||
@ -112,6 +113,8 @@ private final class TokenNode: ASDisplayNode {
|
|||||||
func animateIn() {
|
func animateIn() {
|
||||||
let targetFrame = self.containerNode.frame
|
let targetFrame = self.containerNode.frame
|
||||||
self.containerNode.layer.animateFrame(from: CGRect(origin: targetFrame.origin, size: CGSize(width: 1.0, height: targetFrame.height)), to: targetFrame, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
self.containerNode.layer.animateFrame(from: CGRect(origin: targetFrame.origin, size: CGSize(width: 1.0, height: targetFrame.height)), to: targetFrame, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
||||||
|
self.backgroundNode.layer.animateFrame(from: CGRect(origin: targetFrame.origin, size: CGSize(width: 1.0, height: targetFrame.height)), to: targetFrame, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
||||||
|
|
||||||
self.iconNode.layer.animateScale(from: 0.1, to: 1.0, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
self.iconNode.layer.animateScale(from: 0.1, to: 1.0, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
||||||
self.iconNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15)
|
self.iconNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.15)
|
||||||
self.titleNode.layer.animateScale(from: 0.1, to: 1.0, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
self.titleNode.layer.animateScale(from: 0.1, to: 1.0, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
||||||
@ -422,9 +425,14 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private weak var _scrollView: UIScrollView?
|
||||||
var scrollView: UIScrollView? {
|
var scrollView: UIScrollView? {
|
||||||
|
if let scrollView = self._scrollView {
|
||||||
|
return scrollView
|
||||||
|
}
|
||||||
for view in self.subviews {
|
for view in self.subviews {
|
||||||
if let scrollView = view as? UIScrollView {
|
if let scrollView = view as? UIScrollView {
|
||||||
|
_scrollView = scrollView
|
||||||
return scrollView
|
return scrollView
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -462,8 +470,10 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
|
|||||||
return CGRect(origin: CGPoint(), size: CGSize())
|
return CGRect(origin: CGPoint(), size: CGSize())
|
||||||
}
|
}
|
||||||
var rect = bounds.insetBy(dx: 7.0, dy: 4.0)
|
var rect = bounds.insetBy(dx: 7.0, dy: 4.0)
|
||||||
|
if #available(iOS 14.0, *) {
|
||||||
|
} else {
|
||||||
rect.origin.y += 1.0
|
rect.origin.y += 1.0
|
||||||
|
}
|
||||||
let prefixSize = self.measurePrefixLabel.updateLayout(CGSize(width: floor(bounds.size.width * 0.7), height: bounds.size.height))
|
let prefixSize = self.measurePrefixLabel.updateLayout(CGSize(width: floor(bounds.size.width * 0.7), height: bounds.size.height))
|
||||||
if !prefixSize.width.isZero {
|
if !prefixSize.width.isZero {
|
||||||
let prefixOffset = prefixSize.width + 3.0
|
let prefixOffset = prefixSize.width + 3.0
|
||||||
@ -497,13 +507,19 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
|
|||||||
textOffset += 2.0
|
textOffset += 2.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var placeholderOffset: CGFloat = 0.0
|
||||||
|
if #available(iOS 14.0, *) {
|
||||||
|
placeholderOffset = 1.0
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
|
||||||
let textRect = self.textRect(forBounds: bounds)
|
let textRect = self.textRect(forBounds: bounds)
|
||||||
let labelSize = self.placeholderLabel.updateLayout(textRect.size)
|
let labelSize = self.placeholderLabel.updateLayout(textRect.size)
|
||||||
self.placeholderLabel.frame = CGRect(origin: CGPoint(x: textRect.minX, y: textRect.minY + textOffset), size: labelSize)
|
self.placeholderLabel.frame = CGRect(origin: CGPoint(x: textRect.minX, y: textRect.minY + textOffset + placeholderOffset), size: labelSize)
|
||||||
|
|
||||||
let prefixSize = self.prefixLabel.updateLayout(CGSize(width: floor(bounds.size.width * 0.7), height: bounds.size.height))
|
let prefixSize = self.prefixLabel.updateLayout(CGSize(width: floor(bounds.size.width * 0.7), height: bounds.size.height))
|
||||||
let prefixBounds = bounds.insetBy(dx: 4.0, dy: 4.0)
|
let prefixBounds = bounds.insetBy(dx: 4.0, dy: 4.0)
|
||||||
self.prefixLabel.frame = CGRect(origin: CGPoint(x: prefixBounds.minX, y: prefixBounds.minY + textOffset), size: prefixSize)
|
self.prefixLabel.frame = CGRect(origin: CGPoint(x: prefixBounds.minX, y: prefixBounds.minY + textOffset + placeholderOffset), size: prefixSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func deleteBackward() {
|
override func deleteBackward() {
|
||||||
@ -1101,15 +1117,13 @@ public class SearchBarNode: ASDisplayNode, UITextFieldDelegate {
|
|||||||
placeholderTransition.updateAlpha(node: self.textField.placeholderLabel, alpha: isEmpty ? 1.0 : 0.0)
|
placeholderTransition.updateAlpha(node: self.textField.placeholderLabel, alpha: isEmpty ? 1.0 : 0.0)
|
||||||
|
|
||||||
let clearIsHidden = isEmpty && self.prefixString == nil
|
let clearIsHidden = isEmpty && self.prefixString == nil
|
||||||
transition.updateAlpha(node: self.clearButton, alpha: clearIsHidden ? 0.0 : 1.0)
|
transition.updateAlpha(node: self.clearButton.imageNode, alpha: clearIsHidden ? 0.0 : 1.0)
|
||||||
transition.updateTransformScale(node: self.clearButton, scale: clearIsHidden ? 0.2 : 1.0)
|
transition.updateTransformScale(node: self.clearButton, scale: clearIsHidden ? 0.2 : 1.0)
|
||||||
self.clearButton.isUserInteractionEnabled = !clearIsHidden
|
self.clearButton.isUserInteractionEnabled = !clearIsHidden
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func cancelPressed() {
|
@objc private func cancelPressed() {
|
||||||
if let cancel = self.cancel {
|
self.cancel?()
|
||||||
cancel()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func clearPressed() {
|
@objc private func clearPressed() {
|
||||||
|
@ -238,7 +238,7 @@ public func searchMessages(account: Account, location: SearchMessagesLocation, q
|
|||||||
} else {
|
} else {
|
||||||
let lowerBound = state?.main.messages.last.flatMap({ $0.index })
|
let lowerBound = state?.main.messages.last.flatMap({ $0.index })
|
||||||
let signal: Signal<Api.messages.Messages, MTRpcError>
|
let signal: Signal<Api.messages.Messages, MTRpcError>
|
||||||
if peer.id.namespace == Namespaces.Peer.CloudChannel && query.isEmpty && tags == nil && minDate == nil && maxDate == nil {
|
if peer.id.namespace == Namespaces.Peer.CloudChannel && query.isEmpty && fromId == nil && tags == nil && minDate == nil && maxDate == nil {
|
||||||
signal = account.network.request(Api.functions.messages.getHistory(peer: inputPeer, offsetId: lowerBound?.id.id ?? 0, offsetDate: 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0))
|
signal = account.network.request(Api.functions.messages.getHistory(peer: inputPeer, offsetId: lowerBound?.id.id ?? 0, offsetDate: 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0))
|
||||||
} else {
|
} else {
|
||||||
signal = account.network.request(Api.functions.messages.search(flags: flags, peer: inputPeer, q: query, fromId: fromInputUser, topMsgId: topMsgId?.id, filter: filter, minDate: minDate ?? 0, maxDate: maxDate ?? (Int32.max - 1), offsetId: lowerBound?.id.id ?? 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0))
|
signal = account.network.request(Api.functions.messages.search(flags: flags, peer: inputPeer, q: query, fromId: fromInputUser, topMsgId: topMsgId?.id, filter: filter, minDate: minDate ?? 0, maxDate: maxDate ?? (Int32.max - 1), offsetId: lowerBound?.id.id ?? 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user