{"id":3076,"url":"https://github.com/hyperoslo/Presentation","last_synced_at":"2025-08-06T12:31:51.452Z","repository":{"id":30114014,"uuid":"33663866","full_name":"hyperoslo/Presentation","owner":"hyperoslo","description":":bookmark_tabs: Presentation helps you to make tutorials, release notes and animated pages.","archived":false,"fork":false,"pushed_at":"2020-06-05T00:39:05.000Z","size":5575,"stargazers_count":3046,"open_issues_count":1,"forks_count":190,"subscribers_count":74,"default_branch":"master","last_synced_at":"2024-12-08T05:00:24.115Z","etag":null,"topics":["ios","pages","presentation","slides","swift","tutorials","ui"],"latest_commit_sha":null,"homepage":"hyper.no","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyperoslo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-09T10:53:05.000Z","updated_at":"2024-12-07T14:20:15.000Z","dependencies_parsed_at":"2022-07-15T19:48:58.401Z","dependency_job_id":null,"html_url":"https://github.com/hyperoslo/Presentation","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperoslo%2FPresentation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperoslo%2FPresentation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperoslo%2FPresentation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperoslo%2FPresentation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperoslo","download_url":"https://codeload.github.com/hyperoslo/Presentation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228898283,"owners_count":17988652,"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":["ios","pages","presentation","slides","swift","tutorials","ui"],"created_at":"2024-01-05T20:16:30.706Z","updated_at":"2024-12-09T13:30:34.069Z","avatar_url":"https://github.com/hyperoslo.png","language":"Swift","funding_links":[],"categories":["Walkthrough / Intro / Tutorial","Libs","Swift","Animation [🔝](#readme)"],"sub_categories":["Web View","Animation","Other free courses"],"readme":"⚠️ DEPRECATED, NO LONGER MAINTAINED\n\n![Presentation logo](https://raw.githubusercontent.com/hyperoslo/Presentation/master/Images/logo.png)\n\n[![Version](https://img.shields.io/cocoapods/v/Presentation.svg?style=flat)](http://cocoadocs.org/docsets/Presentation)\n[![CI Status](http://img.shields.io/travis/hyperoslo/Presentation.svg?style=flat)](https://travis-ci.org/hyperoslo/Presentation)\n[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n![Swift](https://img.shields.io/badge/%20in-swift%204.0-orange.svg)\n[![License](https://img.shields.io/cocoapods/l/Presentation.svg?style=flat)](http://cocoadocs.org/docsets/Presentation)\n[![Platform](https://img.shields.io/cocoapods/p/Presentation.svg?style=flat)](http://cocoadocs.org/docsets/Presentation)\n\nLooking for the easiest way of presenting something in your iOS app? Then you are in the right place. **Presentation** will help you make your tutorials, release notes and any kind of animated pages with the minimum amount of effort.\n\n*Presentation* includes the following features:\n\n- Custom positioning: You can use [Position](https://github.com/hyperoslo/Presentation/blob/master/Source/Position.swift) for percentage-based position declaration.\n- [Content](https://github.com/hyperoslo/Presentation/blob/master/Source/Content.swift): View model used for custom positioning and animations. It translates your percents to AutoLayout constraints behind the scenes.\n- Slides: You can use any kind of `UIViewController` as a slide. [SlideController](https://github.com/hyperoslo/Presentation/blob/master/Source/SlideController.swift) is your good friend if you want to use custom positioning and animation features on your pages.\n- Background: You can add views that are visible across all the pages. Also it's possible to animate those views during the transition to the specific page.  \n- [Animations](https://github.com/hyperoslo/Presentation/tree/master/Source/Animations): You can easily animate the appearance of a view on the specific page.\n\nPresentation works both on the iPhone and the iPad. You can use it with both `Swift` and `Objective-C`.\n\nTry one of our [demos](https://github.com/hyperoslo/Presentation/tree/master/Example) to see how it works:\n\n```shell\npod try Presentation\n```\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/hyperoslo/Presentation/master/Example/Parallax/Images/Parallax-v2.gif\"/\u003e\n\u003c/p\u003e\n\n## Table of Contents\n\n* [Usage](#usage)\n  * [Presentation controller](#presentation-controller)\n  * [Position](#position)\n  * [Content view model](#content-view-model)\n  * [Slides](#slides)\n  * [Page animations](#page-animations)\n  * [Background views](#background-views)\n* [Installation](#installation)\n* [Components](#components)\n* [Contributing](#contributing)\n* [Credits](#credits)\n* [License](#license)\n\n## Usage\n\n### Presentation controller\n\n```swift\nimport Presentation\n\nlet viewController1 = UIViewController()\nviewController1.title = \"Controller A\"\n\nlet viewController2 = UIViewController()\nviewController2.title = \"Controller B\"\n\nlet presentationController = PresentationController(pages: [viewController1, viewController2])\n```\n\nIf that's the only thing you need, look into [Pages](https://github.com/hyperoslo/Pages).\n\n### Position\n\n`Position` is percentage-based; you can use `left`, `right`, `top`, `bottom` to set a position.\n\n```swift\nlet position = Position(left: 0.3, top: 0.4)\n```\n\n### Content view model\n\n`Content` view model is a layer between `UIView` and `Position`. The current position is the center of a view by default, but can also be changed to the origin of a view.\n\n```swift\nlet view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 100))\nlet position = Position(left: 0.3, top: 0.4)\n\nlet centeredContent = Content(view: label, position: position)\nlet originContent = Content(view: label, position: position, centered: false)\n```\n\n### Slides\n\n```swift\nlet label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 100))\nlabel.text = \"Slide 1\"\n\nlet position = Position(left: 0.3, top: 0.4)\nlet content = Content(view: label, position: position)\n\nlet controller = SlideController(contents: [content])\n\npresentationController.add([controller])\n```\n\n### Page animations\n\n```swift\nlet contents = [\"Slide 1\", \"Slide 2\", \"Slide 3\"].map { title -\u003e Content in\n  let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 100))\n  label.text = title\n\n  let position = Position(left: 0.3, top: 0.4)\n\n  return Content(view: label, position: position)\n}\n\nvar slides = [SlideController]()\n\nfor index in 0...2 {\n  let content = contents[index]\n  let controller = SlideController(contents: [content])\n  let animation = TransitionAnimation(\n    content: content,\n    destination: Position(left: 0.5, top: content.initialPosition.top),\n    duration: 2.0,\n    dumping: 0.8,\n    reflective: true)\n  controller.add(animations: [animation])\n\n  slides.append(controller)\n}\n\npresentationController.add(slides)\n```\n\n### Background views\n\n```swift\nlet imageView = UIImageView(image: UIImage(named: \"image\"))\nlet content = Content(view: imageView, position: Position(left: -0.3, top: 0.2))\n\npresentationController.addToBackground([content])\n\n// Add pages animations\npresentationController.add(animations: [\n  TransitionAnimation(content: content, destination: Position(left: 0.2, top: 0.2))],\n  forPage: 0)\n\npresentationController.add(animations: [\n  TransitionAnimation(content: content, destination: Position(left: 0.3, top: 0.2))],\n  forPage: 1)\n```\n\n## Installation\n\n**Presentation** is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'Presentation'\n```\n\n**Presentation** is also available through [Carthage](https://github.com/Carthage/Carthage).\nTo install just write into your Cartfile:\n\n```ruby\ngithub \"hyperoslo/Presentation\"\n```\n\n## Components\n\n**Presentation** wouldn’t be possible without the help of these components:\n\n* [**Pages**](https://github.com/hyperoslo/Pages): The easiest way of setting up a `UIPageViewController`\n\n* [**Cartography**](https://github.com/robb/Cartography): Helps you set up your Auto Layout constraints declaratively and without any stringly typing!\n\n## Contributing\n\nPlease see our [playbook](https://github.com/hyperoslo/playbook/blob/master/GIT_AND_GITHUB.md) for guidelines on contributing.\n\n## Credits\n\n[Hyper](http://hyper.no) made this. We’re a digital communications agency with a passion for good code and delightful user experiences. If you’re using this library we probably want to [hire you](https://github.com/hyperoslo/iOS-playbook/blob/master/HYPER_RECIPES.md) (we consider remote employees, too; the only requirement is that you’re awesome).\n\n## License\n\nPresentation is available under the MIT license. See the [LICENSE](https://github.com/hyperoslo/Presentation/blob/master/LICENSE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperoslo%2FPresentation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperoslo%2FPresentation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperoslo%2FPresentation/lists"}