{"id":24065991,"url":"https://github.com/kharauzov/cardsholder","last_synced_at":"2025-09-16T00:32:26.318Z","repository":{"id":218245571,"uuid":"241697808","full_name":"Kharauzov/CardsHolder","owner":"Kharauzov","description":"Demonstration of complex interface layouts using child view controllers in iOS 🦾","archived":false,"fork":false,"pushed_at":"2020-03-27T07:03:14.000Z","size":27634,"stargazers_count":32,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-01-20T18:04:45.686Z","etag":null,"topics":["animation","cardview","childviewcontroller","interactive","interface-design","ios","swift","transition","ui"],"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/Kharauzov.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,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-02-19T18:45:58.000Z","updated_at":"2024-01-20T18:06:04.180Z","dependencies_parsed_at":"2024-01-20T18:04:58.299Z","dependency_job_id":null,"html_url":"https://github.com/Kharauzov/CardsHolder","commit_stats":null,"previous_names":["kharauzov/cardsholder"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharauzov%2FCardsHolder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharauzov%2FCardsHolder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharauzov%2FCardsHolder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharauzov%2FCardsHolder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kharauzov","download_url":"https://codeload.github.com/Kharauzov/CardsHolder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233177345,"owners_count":18636738,"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":["animation","cardview","childviewcontroller","interactive","interface-design","ios","swift","transition","ui"],"created_at":"2025-01-09T11:18:06.632Z","updated_at":"2025-09-16T00:32:19.520Z","avatar_url":"https://github.com/Kharauzov.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Swift](https://img.shields.io/badge/Swift-5.0-orange.svg)\n![Platform](https://img.shields.io/badge/platform-iOS-lightgrey.svg)\n[![License](https://img.shields.io/badge/license-mit-blue.svg)](https://doge.mit-license.org)\n\n## Sense\nI created this project to demonstrate the power of **child view controllers** in iOS development. But in order to avoid boring and simple interfaces in this concept, I was using interactive views and custom transitions 😎\nPlease check attached video below, demonstrating how it works.\n\n* This project contains only pure Swift❤️\n* No third-party frameworks and Pods.\n\nI wrote [an article](https://medium.com/@sergkharauzov/the-power-of-child-viewcontrollers-in-ios-da3d58f5a9fe) on Medium about child view controllers. You can find some code explanations from this project in that article too.\n\nHere is [a shot](https://dribbble.com/shots/10833924-Cards-Holder-iOS-Control) on Dribbble.\n\n## Presentation\n\u003cp align=\"left\"\u003e\n\u003cimg src=\"https://github.com/Kharauzov/CardsHolder/blob/master/VisualFiles/cards_holder.gif\" width=\"450px\" height=\"338px\"/\u003e\n\u003c/p\u003e\n\n### Key things:\n\n1. `UIPanGestureRecognizer` for dragging cards.\n2. `CADisplayLink` for accurate observing of frames changes in animations.\n3. `UIView.animate{}` blocks for most of the animations.\n4. `CABasicAnimation` for shadow layer.\n5. `UIViewControllerTransitioningDelegate` for custom transition to Details scene.\n6. All UI is made **programmatically**, thus it’s reusable. No xibs, no storyboards.\n\n### Structure of the screen\n\n\u003cp align=\"left\"\u003e\n\u003cimg src=\"https://github.com/Kharauzov/CardsHolder/blob/master/VisualFiles/screen1.png\" width=\"266px\" height=\"495px\"/\u003e\n\u003c/p\u003e\n\nHere is a structure of main screen.\u003cbr/\u003e\nProfileViewController - as a parent view controller, subclassed from `CardsHolderViewController`. It contains such child view controllers:\u003cbr/\u003e\n\n1. ProfileShortInfoViewController (top part of the screen)\n2. ProfileActivityViewController (activity card)\n3. RecommendationsViewController (recommended card)\n\n\u003cp align=\"left\"\u003e\n\u003cimg src=\"https://github.com/Kharauzov/CardsHolder/blob/master/VisualFiles/screen2.png\" width=\"266px\" height=\"495px\"/\u003e\n\u003c/p\u003e\n\nIf you open recommended card, there will be such state for the screen:\u003cbr/\u003e\nFully visible RecommendationsViewController, that contains tableView with cells, each of which holds child view controller subclassed from `RecommendationsSliderViewController`.\n\n\n### Feedback\nIf you have any questions or suggestions, feel free to open issue just at this project.\n\n### License\nCardsHolder and all its classes are available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkharauzov%2Fcardsholder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkharauzov%2Fcardsholder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkharauzov%2Fcardsholder/lists"}