{"id":3067,"url":"https://github.com/ariok/BWWalkthrough","last_synced_at":"2025-08-06T16:31:47.390Z","repository":{"id":20901632,"uuid":"24189210","full_name":"ariok/BWWalkthrough","owner":"ariok","description":"BWWalkthrough is a simple library that helps you build custom walkthroughs for your iOS App","archived":false,"fork":false,"pushed_at":"2021-02-07T14:50:57.000Z","size":499,"stargazers_count":2761,"open_issues_count":4,"forks_count":246,"subscribers_count":63,"default_branch":"master","last_synced_at":"2025-07-22T20:48:42.056Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Swift","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/ariok.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-18T13:29:20.000Z","updated_at":"2025-06-24T07:21:13.000Z","dependencies_parsed_at":"2022-08-17T16:05:44.791Z","dependency_job_id":null,"html_url":"https://github.com/ariok/BWWalkthrough","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/ariok/BWWalkthrough","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariok%2FBWWalkthrough","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariok%2FBWWalkthrough/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariok%2FBWWalkthrough/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariok%2FBWWalkthrough/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ariok","download_url":"https://codeload.github.com/ariok/BWWalkthrough/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariok%2FBWWalkthrough/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269112545,"owners_count":24361996,"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","status":"online","status_checked_at":"2025-08-06T02:00:09.910Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-01-05T20:16:30.467Z","updated_at":"2025-08-06T16:31:47.039Z","avatar_url":"https://github.com/ariok.png","language":"Swift","funding_links":[],"categories":["Walkthrough / Intro / Tutorial","Libs","Introduction","Swift","UI [🔝](#readme)","ALL","Other"],"sub_categories":["Web View","UI","Other free courses","Mathematics"],"readme":"\u003cp align=\"center\" \u003e\n\u003cimg src=\"http://www.thinkandbuild.it/gifs/bwwalkthrough.png\" width=\"200\"/\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\n[![CocoaPods](https://img.shields.io/cocoapods/v/BWWalkthrough.svg)]()\n[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Platform](https://img.shields.io/cocoapods/p/BWWalkthrough.svg?style=flat)](http://cocoadocs.org/docsets/BWWalkthrough)\n[![Twitter](https://img.shields.io/badge/twitter-@bitwaker-59ADEB.svg?style=flat)](http://twitter.com/bitwaker)\n\n\n## What is BWWalkthrough?\nBWWalkthrough (BWWT) is a class that helps you create **Walkthroughs** for your iOS Apps.\nIt differs from other similar classes in that there is no rigid template; BWWT is just a layer placed over your controllers that gives you complete **freedom on the design of your views.**.\n\n![Preview](http://www.thinkandbuild.it/gifs/BWWalkthrough_mini2.gif)\n\nVideo preview [Here](http://vimeo.com/106542773)\nA dedicated tutorial is available on [ThinkAndBuild](http://www.thinkandbuild.it/creating-custom-walkthroughs-for-your-apps/)\n\nThe class comes with a set of **pre-built animations** that are automatically applied to the subviews of each page. This set can be  easily substituted with your custom animations.\n\nBWWT is essentially defined by 2 classes:\n**BWWalkthroughViewController** is the Master (or Container). It shows the walkthrough and contains UI elements that are shared among all the Pages (like UIButtons and UIPageControl).\n\n**BWWalkthroughPageViewController** defines every single Page that is going to be displayed with the walkthrough inside the Master.\n\n## What it's not?\nBWWT is not a copy-paste-and-it-just-works class and it is not a fixed walkthrough template. If you need a simple no-configuration walkthrough, BWWT is not the right choice.\n\n## Installation\n\u003e Note: There is a known issue with IBOutlets and Carthage that prevents Outlets from working correctly. \n\u003e I see something similar reported for other [projects](https://github.com/xmartlabs/Eureka/issues/295) too. \n\u003e My suggestion is to follow the manual installation instructions, as it is just matter of drag and drop 2 files in your project. \n\u003e I know you cannot update the library automatically going that route... but IBOutlets are needed for a project like BWWalkthrough. \n\n### With CocoaPods\n\nBWWalkthrough is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod \"BWWalkthrough\"\n```\n\n### With Carthage\n\nInclude this line into your `Cartfile`:\n\n```ruby\ngithub \"ariok/BWWalkthrough\"\n```\n\nRun carthage update to build the framework and drag the built BWWalkthrough.framework into your Xcode project.\n\n### With Swift Package Manager\n``` swift\n// swift-tools-version:5.0\t\nimport PackageDescription\n\t\nlet package = Package(\nname: \"YourTestProject\",\nplatforms: [\n    .iOS(.v10),\n],\ndependencies: [\n    .package(url: \"https://github.com/ariok/BWWalkthrough/.git\", from: \"4.0.1\")\n],\ntargets: [\n    .target(name: \"YourTestProject\", dependencies: [\"BWWalkthrough\"])\n]\n)\n```\nAnd then import wherever needed: ```import BWWalkthrough```\n\t\n#### Adding it to an existent iOS Project via Swift Package Manager\n\t\n1. Using Xcode 11 go to File \u003e Swift Packages \u003e Add Package Dependency\n2. Paste the project URL: https://github.com/ariok/BWWalkthrough\n3. Click on next and select the project target\n\t\nIf you have doubts, please, check the following links:\n\t\n[How to use](https://developer.apple.com/videos/play/wwdc2019/408/)\n\t\n[Creating Swift Packages](https://developer.apple.com/videos/play/wwdc2019/410/)\n\t\nAfter successfully retrieved the package and added it to your project, just import `BWWalkthrough` and you can get the full benefits of it.\n\n### Manually\n\nInclude the `BWWalkthrough/BWWalkthroughViewController.swift` and the `BWWalkthrough/BWWalkthroughPageViewController.swift` files into your project.\n\n## How to use it?\n\n#### Define the Master\n\nAdd a new controller to the Storyboard and set its class as **BWWalkthroughViewController**. This is the Master controller where every page will be attached.\n\nHere you can add all the elements that have to be visible in all the Pages.\n\nThere are 4 prebuilt IBOutlets that you can attach to your elements to obtain some standard behaviours: UIPageControl (**pageControl**), UIButton to close/skip the walkthrough (**closeButton**) and UIButtons to navigate to the next and the previous page (**nextButton**, **prevButton**).\nYou can take advantage of these IBOutlets just creating your UI elements and connecting them with the outlets of the Master controller.\n\n#### Define the Pages\n\nAdd a new controller to the Storyboard and set it has **BWWalkthroughPageViewController**. Define your views as you prefer.\n\n#### Attach Pages to the Master\n\nHere is an example that shows how to create a walkthrough reading data from a dedicated Storyboard:\n\n```swift\n// Get view controllers and build the walkthrough\nlet stb = UIStoryboard(name: \"Walkthrough\", bundle: nil)\nlet walkthrough = stb.instantiateViewControllerWithIdentifier(“Master”) as BWWalkthroughViewController\nlet page_one = stb.instantiateViewControllerWithIdentifier(“page1”) as UIViewController\nlet page_two = stb.instantiateViewControllerWithIdentifier(“page2”) as UIViewController\nlet page_three = stb.instantiateViewControllerWithIdentifier(“page3”) as UIViewController\n\n// Attach the pages to the master\nwalkthrough.delegate = self\nwalkthrough.add(viewController:page_one)\nwalkthrough.add(viewController:page_two)\nwalkthrough.add(viewController:page_three)\n```\n\n## Prebuilt Animations\nYou can add animations without writing a line of code. You just implement a new Page with its subviews and set an animation style using the runtime argument {Key: **animationType**, type: String} via IB. The BWWalkthrough animates your views depending on the selected animation style.\n\nAt the moment (WIP!) the possible value for animationsType are:\n**Linear**, **Curve**, **Zoom** and **InOut**\nThe speed of the animation on the X and Y axes **must** be modified using the runtime argument {key: **speed** type:CGPoint}, while the runtime argument {key: **speedVariance** type: CGPoint} adds a speed variation to the the subviews of the page depending on the hierarchy position.\n\n**Example**\nLet’s say that we have defined these runtime arguments for one of the Pages:\n\n- animationType: \"Linear\"\n- speed: {0,1}\n- speedVariance: {0,2}\n\nThe subviews of the Page will perform a linear animation adding speed to the upfront elements depending on speedVariance.\nSo if we have 3 subviews, the speed of each view will be:\n\n- view 0 {0,1+2}\n- view 1 {0,1+2+2}\n- view 2 {0,1+2+2+2}\n\ncreating the ~~infamous~~ parallax effect.\n\n### Exclude Views from automatic animations\nYou might need to avoid animations for some specific subviews.To stop those views to be part of the automatic BWWalkthrough animations you can just specify a list of views’ tags that you don’t want to animate. The Inspectable property `staticTags` (available from version ~\u003e 0.6) accepts a `String` where you can list these tags separated by comma (“1,3,9”). The views indicated by those tags are now excluded from the automatic animations.\n\n## Custom Animations\nEach page of the walkthrough receives information about its normalized offset position implementing the protocol **BWWalkthroughPage**, so you can extend the prebuilt animations adding your super-custom-shiny-woah™ animations depending on this value (here is a simple example)\n```swift\nfunc walkthroughDidScroll(position: CGFloat, offset: CGFloat) {\n    var tr = CATransform3DIdentity\n    tr.m34 = -1/500.0\n    titleLabel?.layer.transform = CATransform3DRotate(tr, CGFloat(M_PI)*2 * (1.0 - offset), 1, 1, 1)\n}\n```\n\n## Delegate\nThe **BWWalkthroughViewControllerDelegate** protocol defines some useful methods that you can implement to get more control over the Walkthrough flow.\n```swift\n@objc protocol BWWalkthroughViewControllerDelegate {\n        @objc optional func walkthroughCloseButtonPressed()\n        @objc optional func walkthroughNextButtonPressed()\n        @objc optional func walkthroughPrevButtonPressed()\n        @objc optional func walkthroughPageDidChange(pageNumber:Int)\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fariok%2FBWWalkthrough","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fariok%2FBWWalkthrough","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fariok%2FBWWalkthrough/lists"}