Need help with STPopupPreview?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

kevin0571
200 Stars 33 Forks MIT License 51 Commits 6 Opened issues

Description

An alternative peek preview for non 3D Touch devices. Inspired by Instagram.

Services available

!
?

Need anything else?

Contributors list

No Data

STPopupPreview CI Status Version License

STPopupPreview uses long press gesture to enable quick preview of a page on non 3D Touch devices. Preview actions are also supported. This idea is inspired by Instagram.

It is built on top of of STPopup(a library provides STPopupController, which works just like UINavigationController in popup style). Both STPopup and STPopupPreview support iOS 7+.

Demo

A simple demo shows images from my Instagram

STPopupPreviewDemo

Features

  • Long press to preview, release to dismiss.
  • Slide up to show preview actions.
  • Easy integration.

Get Started

CocoaPods

ruby
platform: ios, '7.0'
pod 'STPopupPreview'
Carthage
ruby
github "kevin0571/STPopupPreview"
*Don't forget to drag both STPopupPreview.framework and STPopup.framework into linked frameworks.

Usage

Import header file

#import 

Attach popup preview recognizer to view

CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([CollectionViewCell class]) forIndexPath:indexPath];
if (!cell.popupPreviewRecognizer) {
    cell.popupPreviewRecognizer = [[STPopupPreviewRecognizer alloc] initWithDelegate:self];
}

Implement STPopupPreviewRecognizerDelegate

Return the preview view controller. The preview view controller should have "contentSizeInPopup" set before its "viewDidLoad" called. More about this please read the document of STPopup.

- (UIViewController *)previewViewControllerForPopupPreviewRecognizer:(STPopupPreviewRecognizer *)popupPreviewRecognizer
{
    if (![popupPreviewRecognizer.view isKindOfClass:[CollectionViewCell class]]) {
        return nil;
    }

CollectionViewCell *cell = popupPreviewRecognizer.view;

PreviewViewController *previewViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([PreviewViewController class])];
previewViewController.data = cell.data;
previewViewController.placeholderImage = cell.imageView.image;
return previewViewController;

}

Return a view controller to present the preview view controller. Most of the time it will be the current view controller.

- (UIViewController *)presentingViewControllerForPopupPreviewRecognizer:(STPopupPreviewRecognizer *)popupPreviewRecognizer
{
    return self;
}

Return the preview actions you want to show when slides up. It can be nil if you don't have any preview actions.

- (NSArray *)previewActionsForPopupPreviewRecognizer:(STPopupPreviewRecognizer *)popupPreviewRecognizer
{
    return @[ [STPopupPreviewAction actionWithTitle:@"Like" style:STPopupPreviewActionStyleDefault handler:^(STPopupPreviewAction *action, UIViewController *previewViewController) {
        // Action handler
    }] ];
}

Enable STPopupPreview only if 3D Touch is not available

BOOL isForceTouchAvailable = [self respondsToSelector:@selector(traitCollection)] &&
    [self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
    self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable;
if (!isForceTouchAvailable) {
    if (!cell.popupPreviewRecognizer) {
        cell.popupPreviewRecognizer = [[STPopupPreviewRecognizer alloc] initWithDelegate:self];
    }
}

Issues & Contact

  • If you have any question regarding the usage, please refer to the example project for more details.
  • If you find any bug, please submit an issue.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.