NativePopup

by mono0926

mono0926 / NativePopup

Clone of Apple iOS App's feedback popup, and easily customizable.

224 Stars 15 Forks Last release: 5 months ago (2.1.0) MIT License 114 Commits 23 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

NativePopup

platforms GitHub license Support Carthage and CocoaPods Language: Swift

NativePopup
is clone of Apple iOS AppStore review feedback popup.

NativePopup clones native popup's design and behavior(animation and user interaction). And you can use custom image and emoji in addition to bad/good icons.

Compared with Apple original popups.

NativePopup

Original
NativePopup Done Original Done
NativePopup Good Original Good

Examples

Good/Bad

Good

Bad
good bad

Custom Image/Emoji

Custom Image

Emoji
custome image bad

Usage

Very simple to use NativePopup🐢

// Good
NativePopup.show(image: Preset.Feedback.good,
                 title: "Helpful",
                 message: "Thanks for your feedback.")
// Bad
NativePopup.show(image: Preset.Feedback.bad,
                 title: "Not Helpful",
                 message: "Thanks for your feedback.")
// Custom Image
NativePopup.show(image: UIImage(named: "love")!,
                 title: "参考にγͺった",
                 message: "γƒ•γ‚£γƒΌγƒ‰γƒγƒƒγ‚―γ‚’γ‚γ‚ŠγŒγ¨γ†\nγ”γ–γ„γΎγ—γŸγ€‚")
// Emoji
NativePopup.show(image: Character("🐢"),
                 title: "γ‚€γƒƒγƒŒ",
                 message: "η΅΅ζ–‡ε­—ε―ΎεΏœγ—γŸγƒ―γƒ³")
// Title only
NativePopup.show(image: Preset.Feedback.good,
                 title: "Empty Message πŸ—‘",
                 message: nil)
// Custom duration (default duration is 1.5 seconds)
NativePopup.show(image: Character("πŸ”Ÿ"),
                    title: "10 seconds",
                    message: "Long durationπŸ™‡",
                    duration: 10)
// Like Apple Music
NativePopup.show(image: Preset.Feedback.done,
                 title: "Added to Library",
                 message: nil,
                 initialEffectType: .fadeIn)

image
accepts
ImageConvertible
protocol.
public enum Image {
    case image(UIImage)
    case emoji(Character)

func validate() {
    switch self {
    case .image(let image):
        assert(image.size.width == image.size.height, "Aspect ratio should be 1:1.")
    case .emoji:
        // MEMO: should check?
        break
    }
}

}

public protocol ImageConvertible { var npImage: Image { get } }

UIImage
and
Character
conforms to
ImageConvertible
by default.
extension UIImage: ImageConvertible {
    public var npImage: Image { return .image(self) }
}

extension Character: ImageConvertible { public var npImage: Image { return .emoji(self) } }

You can define custom preset image as below.

extension NativePopup {
    public struct Preset {
        private init() {}
        public enum Feedback: String, ImageConvertible {
            case
            good,
            bad

        public var npImage: Image {
            return .image(UIImage.init(nativePopupNamed: "feedback_\(rawValue)"))
        }
    }
}

}

Image size should be 112 x 112.

Installation

You can install by Carthage or add NativePopup sources manually.

Carthage

Add this to Cartfile

github "mono0926/NativePopup"
$ carthage update

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.