Only show delete button on selected rail item
This commit is contained in:
parent
268d1c4b63
commit
0ab326da92
|
@ -2,17 +2,17 @@
|
|||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "x-shadow-12@1x.png",
|
||||
"filename" : "x-circle-shadow-24@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "x-shadow-12@2x.png",
|
||||
"filename" : "x-circle-shadow-24@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "x-shadow-12@3x.png",
|
||||
"filename" : "x-circle-shadow-24@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
Binary file not shown.
After Width: | Height: | Size: 760 B |
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 345 B |
Binary file not shown.
Before Width: | Height: | Size: 563 B |
Binary file not shown.
Before Width: | Height: | Size: 979 B |
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
@ -331,7 +331,9 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
|
|||
return
|
||||
}
|
||||
|
||||
galleryRailView.configureCellViews(itemProvider: currentItem.album, focusedItem: currentItem, cellViewDecoratorBlock: { _ in })
|
||||
galleryRailView.configureCellViews(itemProvider: currentItem.album,
|
||||
focusedItem: currentItem,
|
||||
cellViewBuilder: { return GalleryRailCellView() })
|
||||
}
|
||||
|
||||
// MARK: Actions
|
||||
|
|
|
@ -400,29 +400,6 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
})
|
||||
}
|
||||
|
||||
func addDeleteIcon(cellView: GalleryRailCellView) {
|
||||
guard let attachmentItem = cellView.item as? SignalAttachmentItem else {
|
||||
owsFailDebug("attachmentItem was unexpectedly nil")
|
||||
return
|
||||
}
|
||||
|
||||
let button = OWSButton { [weak self] in
|
||||
guard let strongSelf = self else { return }
|
||||
strongSelf.remove(attachmentItem: attachmentItem)
|
||||
}
|
||||
button.setImage(#imageLiteral(resourceName: "ic_small_x"), for: .normal)
|
||||
|
||||
let kInsetDistance: CGFloat = 5
|
||||
button.imageEdgeInsets = UIEdgeInsets(top: kInsetDistance, left: kInsetDistance, bottom: kInsetDistance, right: kInsetDistance)
|
||||
|
||||
cellView.addSubview(button)
|
||||
|
||||
let kButtonWidth: CGFloat = 9 + kInsetDistance * 2
|
||||
button.autoSetDimensions(to: CGSize(width: kButtonWidth, height: kButtonWidth))
|
||||
button.autoPinEdge(toSuperviewMargin: .top)
|
||||
button.autoPinEdge(toSuperviewMargin: .trailing)
|
||||
}
|
||||
|
||||
lazy var pagerScrollView: UIScrollView? = {
|
||||
// This is kind of a hack. Since we don't have first class access to the superview's `scrollView`
|
||||
// we traverse the view hierarchy until we find it.
|
||||
|
@ -566,12 +543,15 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
return
|
||||
}
|
||||
|
||||
let cellViewDecoratorBlock = { (cellView: GalleryRailCellView) in
|
||||
self.addDeleteIcon(cellView: cellView)
|
||||
let cellViewBuilder: () -> ApprovalRailCellView = { [weak self] in
|
||||
let cell = ApprovalRailCellView()
|
||||
cell.approvalRailCellDelegate = self
|
||||
return cell
|
||||
}
|
||||
|
||||
galleryRailView.configureCellViews(itemProvider: attachmentItemCollection,
|
||||
focusedItem: currentItem,
|
||||
cellViewDecoratorBlock: cellViewDecoratorBlock)
|
||||
cellViewBuilder: cellViewBuilder)
|
||||
|
||||
galleryRailView.isHidden = attachmentItemCollection.attachmentItems.count < 2
|
||||
}
|
||||
|
@ -1934,3 +1914,54 @@ class MediaMessageTextToolbar: UIView, UITextViewDelegate {
|
|||
return CGFloatClamp(contentSize.height, kMinTextViewHeight, maxTextViewHeight)
|
||||
}
|
||||
}
|
||||
|
||||
extension AttachmentApprovalViewController: ApprovalRailCellViewDelegate {
|
||||
func approvalRailCellView(_ approvalRailCellView: ApprovalRailCellView, didRemoveItem attachmentItem: SignalAttachmentItem) {
|
||||
remove(attachmentItem: attachmentItem)
|
||||
}
|
||||
}
|
||||
|
||||
protocol ApprovalRailCellViewDelegate: class {
|
||||
func approvalRailCellView(_ approvalRailCellView: ApprovalRailCellView, didRemoveItem attachmentItem: SignalAttachmentItem)
|
||||
}
|
||||
|
||||
public class ApprovalRailCellView: GalleryRailCellView {
|
||||
|
||||
weak var approvalRailCellDelegate: ApprovalRailCellViewDelegate?
|
||||
|
||||
lazy var deleteButton: UIButton = {
|
||||
let button = OWSButton { [weak self] in
|
||||
guard let strongSelf = self else { return }
|
||||
|
||||
guard let attachmentItem = strongSelf.item as? SignalAttachmentItem else {
|
||||
owsFailDebug("attachmentItem was unexpectedly nil")
|
||||
return
|
||||
}
|
||||
|
||||
strongSelf.approvalRailCellDelegate?.approvalRailCellView(strongSelf, didRemoveItem: attachmentItem)
|
||||
}
|
||||
|
||||
button.setImage(#imageLiteral(resourceName: "ic_circled_x"), for: .normal)
|
||||
|
||||
let kInsetDistance: CGFloat = 5
|
||||
button.imageEdgeInsets = UIEdgeInsets(top: kInsetDistance, left: kInsetDistance, bottom: kInsetDistance, right: kInsetDistance)
|
||||
|
||||
let kButtonWidth: CGFloat = 24 + kInsetDistance * 2
|
||||
button.autoSetDimensions(to: CGSize(width: kButtonWidth, height: kButtonWidth))
|
||||
|
||||
return button
|
||||
}()
|
||||
|
||||
override func setIsSelected(_ isSelected: Bool) {
|
||||
super.setIsSelected(isSelected)
|
||||
|
||||
if isSelected {
|
||||
addSubview(deleteButton)
|
||||
|
||||
deleteButton.autoPinEdge(toSuperviewEdge: .top, withInset: -12)
|
||||
deleteButton.autoPinEdge(toSuperviewEdge: .trailing, withInset: -8)
|
||||
} else {
|
||||
deleteButton.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import PromiseKit
|
||||
|
@ -25,7 +25,7 @@ public class GalleryRailCellView: UIView {
|
|||
super.init(frame: frame)
|
||||
|
||||
layoutMargins = .zero
|
||||
self.clipsToBounds = true
|
||||
clipsToBounds = false
|
||||
addSubview(imageView)
|
||||
imageView.autoPinEdgesToSuperviewMargins()
|
||||
|
||||
|
@ -107,7 +107,9 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
|
|||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
clipsToBounds = false
|
||||
addSubview(scrollView)
|
||||
scrollView.clipsToBounds = false
|
||||
scrollView.layoutMargins = .zero
|
||||
scrollView.autoPinEdgesToSuperviewMargins()
|
||||
}
|
||||
|
@ -118,7 +120,7 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
|
|||
|
||||
// MARK: Public
|
||||
|
||||
public func configureCellViews(itemProvider: GalleryRailItemProvider?, focusedItem: GalleryRailItem?, cellViewDecoratorBlock: (GalleryRailCellView) -> Void) {
|
||||
public func configureCellViews(itemProvider: GalleryRailItemProvider?, focusedItem: GalleryRailItem?, cellViewBuilder: () -> GalleryRailCellView) {
|
||||
let animationDuration: TimeInterval = 0.2
|
||||
|
||||
guard let itemProvider = itemProvider else {
|
||||
|
@ -169,11 +171,12 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
|
|||
self.isHidden = false
|
||||
}
|
||||
|
||||
let cellViews = buildCellViews(items: itemProvider.railItems, cellViewDecoratorBlock: cellViewDecoratorBlock)
|
||||
let cellViews = buildCellViews(items: itemProvider.railItems, cellViewBuilder: cellViewBuilder)
|
||||
self.cellViews = cellViews
|
||||
let stackView = UIStackView(arrangedSubviews: cellViews)
|
||||
stackView.axis = .horizontal
|
||||
stackView.spacing = 2
|
||||
stackView.clipsToBounds = false
|
||||
|
||||
scrollView.addSubview(stackView)
|
||||
stackView.autoPinEdgesToSuperviewEdges()
|
||||
|
@ -203,11 +206,10 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
|
|||
return scrollView
|
||||
}()
|
||||
|
||||
private func buildCellViews(items: [GalleryRailItem], cellViewDecoratorBlock: (GalleryRailCellView) -> Void) -> [GalleryRailCellView] {
|
||||
private func buildCellViews(items: [GalleryRailItem], cellViewBuilder: () -> GalleryRailCellView) -> [GalleryRailCellView] {
|
||||
return items.map { item in
|
||||
let cellView = GalleryRailCellView()
|
||||
let cellView = cellViewBuilder()
|
||||
cellView.configure(item: item, delegate: self)
|
||||
cellViewDecoratorBlock(cellView)
|
||||
return cellView
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue