Как показать индикатор активности для ASNetworkImageNode?

Вот код, который я пробовал, но когда изображение еще не загружено, ничего не появляется (должен появиться анимированный индикатор). Как лучше всего показывать индикатор активности? Я подключился к ASNetworkImageNodeDelegate.

import AsyncDisplayKit

class WideImageFeedNode : ASCellNode, ASNetworkImageNodeDelegate {


    var imageNode = ASNetworkImageNode()
    var activityIndicator:UIActivityIndicatorView?

    init(itemid:Int) {
        super.init()

           imageNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor()
            let imgURL = URL(string:"http://...somelargeimage.jpg")

            imageNode.url = imgURL
            imageNode.delegate = self

            self.addSubnode(imageNode)

        self.automaticallyManagesSubnodes = true



    }

    override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {


        var finalStackArr:[ASLayoutElement] = [self.imageNode]


        let finalSpec = ASStackLayoutSpec(direction: .vertical, spacing: 10.0, justifyContent: .start, alignItems: .start, children: finalStackArr)

        return finalSpec

    }

    func imageNode(_ imageNode: ASNetworkImageNode, didLoad image: UIImage) {
        if let activityIndicator = self.activityIndicator {
            activityIndicator.removeFromSuperview()
            self.activityIndicator = nil
        }
        self.setNeedsLayout()

    }

// helper functions
func setupActivityIndicator(bounds:CGSize) -> UIActivityIndicatorView {
    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)

    var refreshRect = activityIndicator.frame
    refreshRect.origin = CGPoint(x: (bounds.width - activityIndicator.frame.size.width) / 2.0, y: (bounds.height - activityIndicator.frame.size.height) / 2.0)
    activityIndicator.frame = refreshRect
    return activityIndicator
}

    func imageNodeDidStartFetchingData(_ imageNode: ASNetworkImageNode) {
        self.activityIndicator = setupActivityIndicator(bounds: imageNode.style.preferredSize)
        imageNode.view.addSubview(self.activityIndicator!)
    }

    func imageNode(_ imageNode: ASNetworkImageNode, didFailWithError error: Error) {
        if let activityIndicator = self.activityIndicator {
            activityIndicator.removeFromSuperview()
            self.activityIndicator = nil
        }
    }



}

1 ответ

Неважно, это работает. Я пропустил один звонок:

func imageNodeDidStartFetchingData(_ imageNode: ASNetworkImageNode) {
    self.activityIndicator = setupActivityIndicator(bounds: imageNode.style.preferredSize)
    imageNode.view.addSubview(self.activityIndicator!)
    self.activityIndicator!.startAnimating()
}
Другие вопросы по тегам