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")!
|
let buttonImage = UIImage(systemName: collapsed ? "chevron.down" : "chevron.up")!
|
||||||
|
|
||||||
if animated, let buttonImageView = collapseButton.imageView {
|
if 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 {
|
|
||||||
collapseButton.setImage(buttonImage, for: .normal)
|
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 {
|
if collapsed {
|
||||||
|
|
|
@ -81,10 +81,14 @@
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="30" id="icD-3q-uJ6"/>
|
<constraint firstAttribute="height" constant="30" id="icD-3q-uJ6"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<color key="tintColor" systemColor="systemBackgroundColor"/>
|
<color key="tintColor" systemColor="tintColor"/>
|
||||||
<state key="normal" image="chevron.down" catalog="system">
|
<state key="normal" image="chevron.down" catalog="system">
|
||||||
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
||||||
</state>
|
</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>
|
<connections>
|
||||||
<action selector="collapseButtonPressed" destination="IDI-ur-8pa" eventType="touchUpInside" id="00b-nM-U5g"/>
|
<action selector="collapseButtonPressed" destination="IDI-ur-8pa" eventType="touchUpInside" id="00b-nM-U5g"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
|
|
@ -109,10 +109,16 @@
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="30" id="z84-XW-gP3"/>
|
<constraint firstAttribute="height" constant="30" id="z84-XW-gP3"/>
|
||||||
</constraints>
|
</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">
|
<state key="normal" image="chevron.down" catalog="system">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
||||||
</state>
|
</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>
|
<connections>
|
||||||
<action selector="collapseButtonPressed" destination="BR5-ZS-LIo" eventType="touchUpInside" id="twO-rE-1pQ"/>
|
<action selector="collapseButtonPressed" destination="BR5-ZS-LIo" eventType="touchUpInside" id="twO-rE-1pQ"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
|
Loading…
Reference in New Issue