{"id":3065,"url":"https://github.com/ealeksandrov/EAIntroView","last_synced_at":"2025-08-03T13:31:50.070Z","repository":{"id":10609630,"uuid":"12827225","full_name":"ealeksandrov/EAIntroView","owner":"ealeksandrov","description":"Highly customizable drop-in solution for introduction views.","archived":false,"fork":false,"pushed_at":"2020-11-10T12:11:04.000Z","size":3182,"stargazers_count":3757,"open_issues_count":20,"forks_count":501,"subscribers_count":125,"default_branch":"master","last_synced_at":"2024-10-29T15:28:38.317Z","etag":null,"topics":["demo","intro","ios","objective-c","walkthrough"],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ealeksandrov.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-09-14T09:41:55.000Z","updated_at":"2024-10-18T20:25:52.000Z","dependencies_parsed_at":"2022-08-07T06:00:04.163Z","dependency_job_id":null,"html_url":"https://github.com/ealeksandrov/EAIntroView","commit_stats":null,"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ealeksandrov%2FEAIntroView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ealeksandrov%2FEAIntroView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ealeksandrov%2FEAIntroView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ealeksandrov%2FEAIntroView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ealeksandrov","download_url":"https://codeload.github.com/ealeksandrov/EAIntroView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228236639,"owners_count":17889562,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["demo","intro","ios","objective-c","walkthrough"],"created_at":"2024-01-05T20:16:30.390Z","updated_at":"2024-12-07T01:30:34.772Z","avatar_url":"https://github.com/ealeksandrov.png","language":"Objective-C","readme":"# EAIntroView - simple iOS Introductions\n\n[![CI Status](https://github.com/ealeksandrov/EAIntroView/workflows/CI/badge.svg?branch=master)](https://github.com/ealeksandrov/EAIntroView/actions)\n[![Version](https://img.shields.io/cocoapods/v/EAIntroView.svg?style=flat)](http://cocoadocs.org/docsets/EAIntroView)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![License](https://img.shields.io/cocoapods/l/EAIntroView.svg?style=flat)](http://cocoadocs.org/docsets/EAIntroView)\n[![Platform](https://img.shields.io/cocoapods/p/EAIntroView.svg?style=flat)](http://cocoadocs.org/docsets/EAIntroView)\n\n![ExampleImage1](https://raw.githubusercontent.com/ealeksandrov/EAIntroView/master/Screenshot01.png)\n![ExampleImage2](https://raw.githubusercontent.com/ealeksandrov/EAIntroView/master/Screenshot02.png)\n\nThis is highly customizable drop-in solution for introduction views.\nSome features (remember, most features are optional and can be turned off):\n\n* beautiful demo project to look on some examples\n    * customizability is unlimited, one can make complex introView with animations and interactive pages, so do not limit yourself with existing examples\n* for each basic page:\n    * background (with cross-dissolve transition between pages)\n    * custom iOS7 motion effects (parallax) on background\n    * title view (+ Y position)\n    * title text (+ font, color and Y position)\n    * description text (+ font, color, width and Y position)\n    * subviews array (added to page after building default layout)\n* possibility to set your own custom view for page:\n    * pageWithCustomView:\n    * pageWithCustomViewFromNibNamed:\n* possibility to set block action on page events:\n    * pageDidLoad\n    * pageDidAppear\n    * pageDidDisappear\n* many options to customize parent view:\n    * swipe from last page to close\n    * switching pages with one simple tap\n    * custom background image or color\n    * custom page control\n    * custom skip button\n    * pinned titleView (+ Y position, can be hidden on some pages)\n* delegate protocol to listen:\n    * introDidFinish:\n    * intro:pageAppeared:withIndex:\n* actions on IntroView:\n    * setPages:\n    * showInView:animateDuration:\n    * hideWithFadeOutDuration:\n    * setCurrentPageIndex:animated:\n* storyboard/IB support\n* and many more...\n\n## Installation\n\nYou can setup `EAIntroView` using [Carthage](https://github.com/Carthage/Carthage), [CocoaPods](http://github.com/CocoaPods/CocoaPods) or [completely manually](#setting-up-manually).\n\n### Carthage\n\n1. Add `EAIntroView` to your project's `Cartfile`:\n\n    ```ruby\n    github \"ealeksandrov/EAIntroView\"\n    ```\n\n2. Run `carthage update` in your project directory.\n3. On your application targets’ “General” settings tab, in the “Linked Frameworks and Libraries” section, drag and drop **EAIntroView.framework** and **EARestrictedScrollView.framework** from the `Carthage/Build/iOS/` folder on disk.\n4. On your application targets’ “Build Phases” settings tab, click the “+” icon and choose “New Run Script Phase”. Create a Run Script with the following contents:\n\n    ```shell\n    /usr/local/bin/carthage copy-frameworks\n    ```\n    \n    add the paths to the frameworks under “Input Files”:\n    \n    ```shell\n    $(SRCROOT)/Carthage/Build/iOS/EAIntroView.framework\n    $(SRCROOT)/Carthage/Build/iOS/EARestrictedScrollView.framework\n    ```\n    \n    and the paths to the copied frameworks to the “Output Files”:\n    \n    ```shell\n    $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/EAIntroView.framework\n    $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/EARestrictedScrollView.framework\n    ```\n\n### CocoaPods\n\n1. Add EAIntroView to your project's `Podfile`:\n\n    ```ruby\n    pod 'EAIntroView'\n    ```\n\n2. Run `pod update` or `pod install` in your project directory.\n\n### Setting Up Manually\n\n1. Add [EARestrictedScrollView](https://github.com/ealeksandrov/EARestrictedScrollView) header and implementation to your project (2 files total).\n2. Add `EAIntroPage` and `EAIntroView` headers and implementations to your project (4 files total).\n3. You can now use `EAIntroView` by adding the following import:\n\n    ```swift\n    import EAIntroView\n    ```\n\n    ```obj-c\n    #import \u003cEAIntroView/EAIntroView.h\u003e\n    ```\n\n## How To Use It\n\nSample project have many examples of customization. Here are only simple ones.\n\n### Step 1 - Build Pages\nEach page created with `[EAIntroPage page]` class method. Then you can customize any property, all of them are optional. Another approach is to pass your own (can be nib), custom view in `EAIntroPage`, this way most other options are ignored.\n\n```objc\n// basic\nEAIntroPage *page1 = [EAIntroPage page];\npage1.title = @\"Hello world\";\npage1.desc = sampleDescription1;\n// custom\nEAIntroPage *page2 = [EAIntroPage page];\npage2.title = @\"This is page 2\";\npage2.titleFont = [UIFont fontWithName:@\"Georgia-BoldItalic\" size:20];\npage2.titlePositionY = 220;\npage2.desc = sampleDescription2;\npage2.descFont = [UIFont fontWithName:@\"Georgia-Italic\" size:18];\npage2.descPositionY = 200;\npage2.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@\"title2\"]];\npage2.titleIconPositionY = 100;\n// custom view from nib\nEAIntroPage *page3 = [EAIntroPage pageWithCustomViewFromNibNamed:@\"IntroPage\"];\npage3.bgImage = [UIImage imageNamed:@\"bg2\"];\n```\n\n### Step 2 - Create Introduction View\nOnce all pages have been created,  you are ready to create the introduction view. Just pass them in right order in the introduction view. You can also pass array of pages after IntroView's initialization, it will rebuild its contents.\n\n```objc\nEAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds andPages:@[page1,page2,page3,page4]];\n```\n\nDon't forget to set the delegate if you want to use any callbacks.\n\n```objc\n[intro setDelegate:self];\n```\n\n### Step 3 - Show Introduction View\n\n```objc\n[intro showInView:self.view animateDuration:0.0];\n```\n\n### Storyboard/IB\nSince 1.3.0 `EAIntroView` supports init from IB. Since 2.0.0 `EAIntroPage` supports it too.\n\n1. Drop `UIView` to your IB document.\n2. Set its class to `EAIntroView`.\n3. Create `IBOutlet` property in your view controller: `@property(nonatomic,weak) IBOutlet EAIntroView *introView;`.\n4. Connect `IBOutlet` with `EAIntroView` in IB.\n5. Build array of pages (you can use `pageWithCustomViewFromNibNamed:` here with separate nibs for each page).\n6. Pass pages array to `EAIntroView` property in `setPages:`.\n\n## Author\n\nCreated and maintained by Evgeny Aleksandrov ([@ealeksandrov](https://twitter.com/ealeksandrov)).\n\n## License\n\n`EAIntroView` is available under the MIT license. See the [LICENSE.md](LICENSE.md) file for more info.\n","funding_links":[],"categories":["Walkthrough / Intro / Tutorial","Objective-C","Object-C 库","walkthrough","iOS"],"sub_categories":["Web View","Other free courses","界面控件"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fealeksandrov%2FEAIntroView","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fealeksandrov%2FEAIntroView","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fealeksandrov%2FEAIntroView/lists"}