ZFPlayer

repository·master·Indexed 27 days ago

https://github.com/renzifeng/zfplayer

An iOS player template designed to decouple the player engine from the control layer. ZFPlayer allows developers to swap different player SDKs (such as AVPlayer or ijkplayer) and customize the UI control layer by conforming to the ZFPlayerMediaPlayback and ZFPlayerMediaControl protocols.

Tokens
1.9K
Snippets
8
Records
15
Agent score
93%

What's inside ZFPlayer

  1. Use MJRefreshAutoGifFooter for animated pull-to-refresh

    master

    Use MJRefreshAutoGifFooter to implement a footer that uses animated GIF images during the refreshing process. You must provide a target object and a selector for the action to be performed when the refresh status is entered.

    // Set the callback(Once you enter the refresh status,then call the action of target, that is call [self loadMoreData])
    MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    
    // Set the refresh image
    [footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
    
    // Set footer
    self.tableView.mj_footer = footer;
  2. Use MJRefreshGifHeader for animated drop-down refresh

    master

    To use animated images for the drop-down refresh, use MJRefreshGifHeader. You must set the images for each state: MJRefreshStateIdle, MJRefreshStatePulling, and MJRefreshStateRefreshing.

    MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    [header setImages:idleImages forState:MJRefreshStateIdle];
    [header setImages:pullingImages forState:MJRefreshStatePulling];
    [header setImages:refreshingImages forState:MJRefreshStateRefreshing];
    self.tableView.mj_header = header;
    MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    [header setImages:idleImages forState:MJRefreshStateIdle];
    [header setImages:pullingImages forState:MJRefreshStatePulling];
    [header setImages:refreshingImages forState:MJRefreshStateRefreshing];
    self.tableView.mj_header = header;
  3. Configure navigation bar appearance via view controllers

    master

    The library handles navigation bar transitions automatically (e.g., transitioning between views with and without bars). Instead of calling setNavigationBarHidden:animated: on the UINavigationController, you should use the fd_prefersNavigationBarHidden property on your view controller. This property is YES by default.

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Set to NO to show the navigation bar
        self.fd_prefersNavigationBarHidden = NO;
    }
  4. Initialize ZFPlayerController

    master

    The ZFPlayerController is the main class used to manage playback. It supports two initialization styles: Normal style (for a single player view) and List style (for integrating with UITableView, UICollectionView, or UIScrollView).

    // --- Normal style initialization ---
    ZFPlayerController *player = [ZFPlayerController playerWithPlayerManager:playerManager containerView:containerView];
    // OR
    ZFPlayerController *player = [[ZFPlayerController alloc] initwithPlayerManager:playerManager containerView:containerView];
    
    // --- List style initialization (for TableView, CollectionView, or ScrollView) ---
    ZFPlayerController *player = [ZFPlayerController playerWithScrollView:tableView playerManager:playerManager containerViewTag:containerViewTag];
    // OR
    ZFPlayerController *player = [ZFPlayerController alloc] initWithScrollView:tableView playerManager:playerManager containerViewTag:containerViewTag];
    
    // For UIScrollView specifically
    ZFPlayerController *player = [ZFPlayerController playerWithScrollView:scrollView playerManager:playerManager containerView:containerView];
  5. Use MJRefreshHeader for drop-down refresh

    master

    Use MJRefreshHeader subclasses to implement drop-down (pull-down) refresh. You can initialize a header using a refreshing block or a target-action pattern.

    Using a refreshing block:

    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
       // Call this block when entering the refresh status automatically 
    }];

    Using target-action:

    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

    Trigger refresh manually:

    [self.tableView.mj_header beginRefreshing];
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
       //Call this Block When enter the refresh status automatically 
    }];