Как анимировать UITableViewCells так же, как приложение Apple Mail

#swift #uitableview #animation

#swift #uitableview #Анимация

Вопрос:

Надеюсь, у вас все хорошо!. Ну, у меня есть кнопка редактирования UIButton в правом верхнем углу, теперь, когда я нажимаю на нее, она становится обычным стилем редактирования. теперь, когда он переходит в режим редактирования, он просто быстро перемещает мою ячейку, я хотел бы сделать анимацию, чтобы просто плавно перемещать ее, как в приложении mail: (gif, который показывает приложение Apple Mail)

https://media2.giphy.com/media/4u8oHz6ymC7CyjJJCZ/giphy.gif

более того, я знаю, что есть метод willdisply, но дело в том, что я использую IBAction для кнопки редактирования 🙂 надеюсь, вы все понимаете мою точку зрения, с новым годом.

МОЙ КОД!:

 import UIKit

class NotificationsViewController: UIViewController {
    
    
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var editButton: UIBarButtonItem!
    
    @IBOutlet weak var toolBar: UIToolbar!
    
    
    
    
    
    var arrayOfNotifications = [Notification]()
    
    var selectedCounter = 0
    
    
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        arrayOfNotifications = createArrayOfNotifications()
        
        configureTableView()

        
        self.navigationItem.titleView = setTitle(title: "Notifications", subtitle: "1 New")
        
        //We hide the toolBar till we hit the "Edit"
        toolBar.isHidden = true
        
        
        configureUIButtons()
        
        
        
        
    }
    
    
    
    func configureTableView() {
        tableView.dataSource = self
        tableView.delegate = self
        tableView.rowHeight = 80
    }
    
    
    func createArrayOfNotifications() -> [Notification] {
        // Create Date
        let date = Date()
        
        // Create Date Formatter
        let dateFormatter = DateFormatter()
        
        // Set Date/Time Style
        dateFormatter.dateStyle = .long
        dateFormatter.timeStyle = .short
        
        // Convert Date to String
        let currentDate = dateFormatter.string(from: date) // September 9, 2020 at 12:24 PM
        
        var tempNotificationsArr : [Notification] = []
        
        let notification1 = Notification(image: UIImage(systemName: "message.fill")!, title: "Hello Aviad", date: currentDate, team: "In: Loopers")
        
        tempNotificationsArr.append(notification1)
        
        
        return tempNotificationsArr
    }
    
    
    
    
    // MARK: - UIBarButtonItem Creation and Configuration
    
     func configureUIButtons() {
        
//        let toolbarButtonItems = [
//            customTitleBarButtonItem,
//            flexibleSpaceBarButtonItem,
//            deleteBarButtonItem
//        ]
        
        let toolbarButtonItems = [
            markBarButtonItem, flexibleSpaceBarButtonItem, deleteBarButtonItem
        ]
        
        toolBar.setItems(toolbarButtonItems, animated: true)
    }
    
    
    
    var deleteBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Delete", style: .plain, target: self, action: #selector(NotificationsViewController.deleteButtonItemClicked(_:)))
    
    
    
//    var deleteBarButtonItem: UIBarButtonItem {
//        let deleteBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Delete", style: .plain, target: self, action: #selector(NotificationsViewController.deleteButtonItemClicked(_:)));
//
//        return deleteBarButtonItem
//
//    }

    
    var flexibleSpaceBarButtonItem: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    
    
//    var flexibleSpaceBarButtonItem: UIBarButtonItem {
//        return UIBarButtonItem(barButtonSystemItem: .flexibleSpace,
//                               target: nil,
//                               action: nil)
//    }
    
    
    
    var markBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Mark", style: .plain, target: self, action: #selector(NotificationsViewController.markButtonItemClicked(_:)))
    
//
//    var markBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Mark", image: nil, primaryAction: nil, menu: menuItems())
//
//
    
    
//
//    var customTitleBarButtonItem: UIBarButtonItem {
//        let markMenu = UIMenu(title: "", children: [
//            UIAction(title: "Flag", image: UIImage(systemName: "flag")) { action in
//                print("Flag is pressed")
//            },
//            UIAction(title: "Mark as Unread", image: UIImage(systemName: "envelope.badge")) { action in
//                print("Mark as Unread is pressed")
//            },
//        ])
//
//        return UIBarButtonItem(title: "Mark", menu: markMenu)
//
//    }
    
    
    
    // MARK: - Actions
    @objc
    func deleteButtonItemClicked(_ barButtonItem: UIBarButtonItem) {
        print("Delete Button is clicked (barButtonItem).")
    }

    
    @objc
    func markButtonItemClicked(_ barButtonItem: UIBarButtonItem ) -> UIMenu {
        print("Mark is pressed")


        let markMenu = UIMenu(title: "", children: [
                    UIAction(title: "Flag", image: UIImage(systemName: "flag")) { action in
                        print("Flag is pressed")
                    },
                    UIAction(title: "Mark as Unread", image: UIImage(systemName: "envelope.badge")) { action in
                        print("Mark as Unread is pressed")
                    },
                ])

                return markMenu

    }
    
    
    func menuItems() -> UIMenu {
        let markMenu = UIMenu(title: "", children: [
            UIAction(title: "Flag", image: UIImage(systemName: "flag")) { action in
                print("Flag is pressed")
            },
            UIAction(title: "Mark as Unread", image: UIImage(systemName: "envelope.badge")) { action in
                print("Mark as Unread is pressed")
            },
        ])
        
        return markMenu
    }
    
    
    
    
    //TODO: - Pop up the tool bar, - Edit function
    @IBAction func editAction(_ sender: UIBarButtonItem) {
        
        
        if(self.tableView.isEditing == true)
        {
            self.tableView.isEditing = false
            self.navigationItem.rightBarButtonItem?.title = "Edit"
            toolBar.isHidden = true
            
        }
        else
        {
            tableView.allowsMultipleSelectionDuringEditing = true
            
            self.tableView.isEditing = true
            self.navigationItem.rightBarButtonItem?.title = "Cancel"
            toolBar.isHidden = false
            
                        
            
            
//            deleteBarButtonItem.isEnabled = true
//            customTitleBarButtonItem.isEnabled = true
            
            
            
            toolBarAnimation()
            
        }
        
    }
    
    
    
 

Комментарии:

1. Пожалуйста, покажите нам свой код для UITableView редактирования. Может быть, даже немного подробнее, а не ссылка? Я комментирую это, потому UITableView что поставляется с режимом редактирования и анимацией! Не уверен, как они сравниваются с Mail.app, не говоря уже о различиях. Но это хорошая идея, чтобы показать, что вы пробовали, с более подробной информацией.

2. @dfd Конечно, я добавляю свой код прямо сейчас! 🙂

Ответ №1:

Вместо того , чтобы

 self.tableView.isEditing = true
 

используйте

 self.tableView.setEditing(true, animated: true)
 

Комментарии:

1. Я использую его в setEditing, дело в том, что я хочу, чтобы ячейки были гладкими, как у Apple 🙂