forked from shadowfacts/Tusker
Fix collapse button disappearing when navigating away
This commit is contained in:
parent
468a559127
commit
3e0feba273
|
@ -361,23 +361,31 @@ class BaseStatusTableViewCell: UITableViewCell {
|
|||
|
||||
let buttonImage = UIImage(systemName: collapsed ? "chevron.down" : "chevron.up")!
|
||||
|
||||
if animated, let buttonImageView = collapseButton.imageView {
|
||||
// we need to use a keyframe animation for this, because we want to control the direction the chevron rotates
|
||||
// when rotating ±π, UIKit will always rotate in the same direction
|
||||
// using a keyframe to set an intermediate point in the animation allows us to force a specific direction
|
||||
UIView.animateKeyframes(withDuration: 0.2, delay: 0, options: .calculationModeLinear, animations: {
|
||||
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.5) {
|
||||
buttonImageView.transform = CGAffineTransform(rotationAngle: collapsed ? .pi / 2 : -.pi / 2)
|
||||
}
|
||||
UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5) {
|
||||
buttonImageView.transform = CGAffineTransform(rotationAngle: .pi)
|
||||
}
|
||||
}, completion: { (finished) in
|
||||
buttonImageView.transform = .identity
|
||||
self.collapseButton.setImage(buttonImage, for: .normal)
|
||||
})
|
||||
} else {
|
||||
if let buttonImageView = collapseButton.imageView {
|
||||
collapseButton.setImage(buttonImage, for: .normal)
|
||||
|
||||
if animated {
|
||||
buttonImageView.layer.opacity = 0
|
||||
|
||||
// this whole hack is necessary because when just rotating buttonImageView, it moves to the left of the button and then animates back to the center
|
||||
let imageView = UIImageView(image: buttonImageView.image)
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentView.addSubview(imageView)
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.widthAnchor.constraint(equalTo: buttonImageView.widthAnchor),
|
||||
imageView.heightAnchor.constraint(equalTo: buttonImageView.heightAnchor),
|
||||
imageView.centerXAnchor.constraint(equalTo: collapseButton.centerXAnchor),
|
||||
imageView.centerYAnchor.constraint(equalTo: collapseButton.centerYAnchor),
|
||||
])
|
||||
imageView.tintColor = .white
|
||||
|
||||
UIView.animate(withDuration: 0.3, delay: 0) {
|
||||
imageView.transform = CGAffineTransform(rotationAngle: .pi)
|
||||
} completion: { _ in
|
||||
imageView.removeFromSuperview()
|
||||
buttonImageView.layer.opacity = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if collapsed {
|
||||
|
|
|
@ -81,10 +81,14 @@
|
|||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="icD-3q-uJ6"/>
|
||||
</constraints>
|
||||
<color key="tintColor" systemColor="systemBackgroundColor"/>
|
||||
<color key="tintColor" systemColor="tintColor"/>
|
||||
<state key="normal" image="chevron.down" catalog="system">
|
||||
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
||||
</state>
|
||||
<buttonConfiguration key="configuration" style="filled" image="chevron.down" catalog="system">
|
||||
<preferredSymbolConfiguration key="preferredSymbolConfigurationForImage" scale="large"/>
|
||||
<color key="baseForegroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</buttonConfiguration>
|
||||
<connections>
|
||||
<action selector="collapseButtonPressed" destination="IDI-ur-8pa" eventType="touchUpInside" id="00b-nM-U5g"/>
|
||||
</connections>
|
||||
|
|
|
@ -109,10 +109,16 @@
|
|||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="z84-XW-gP3"/>
|
||||
</constraints>
|
||||
<color key="tintColor" systemColor="systemBackgroundColor"/>
|
||||
<color key="tintColor" systemColor="tintColor"/>
|
||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||
<state key="normal" image="chevron.down" catalog="system">
|
||||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
||||
</state>
|
||||
<buttonConfiguration key="configuration" style="filled" image="chevron.down" catalog="system">
|
||||
<preferredSymbolConfiguration key="preferredSymbolConfigurationForImage" scale="large"/>
|
||||
<color key="baseForegroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</buttonConfiguration>
|
||||
<connections>
|
||||
<action selector="collapseButtonPressed" destination="BR5-ZS-LIo" eventType="touchUpInside" id="twO-rE-1pQ"/>
|
||||
</connections>
|
||||
|
|
Loading…
Reference in New Issue