A UICollectionView backed drop-in component for introduction views

Overview

#GHWalkThrough - iOS App Walk through control

alt tag alt tag alt tag alt tag

This is simple and customizable drop-in solution for showing app walkthroughs or intros.

  • Configurable to walk through in horizontal and vertical directions
  • Support for having custom floating header on all pages
  • Supports fixed background image

##How To Use

Sample app contains examples of how to configure the component

  • Add GHWalkThroughView and GHWalkThroughPageCell headers and implementations to your project (4 files total).
  • Include with #import "GHWalkThroughView.h" to use it wherever you need.
  • Set and implement the GHWalkThroughViewDataSource to provide data about the pages.

Sample Code

// Creating
    GHWalkThroughView* ghView = [[GHWalkThroughView alloc] initWithFrame:self.view.bounds];
	[ghView setDataSource:self];

// Implementing data source methods
(NSInteger) numberOfPages
{
    return 5;
}

- (void) configurePage:(GHWalkThroughPageCell *)cell atIndex:(NSInteger)index
{
    cell.title = @"Some title for page";
    cell.titleImage = [UIImage imageNamed:@"Title Image name"];
    cell.desc = @"Some Description String";
}

- (UIImage*) bgImageforPage:(NSInteger)index
{
    UIImage* image = [UIImage imageNamed:@"bgimage"];
    return image;
}

##Credits

For inspiration

###License :

The MIT License

Comments
  • Rare EXC_BAD_ACCESS crash

    Rare EXC_BAD_ACCESS crash

    I'm encountering a rare crash that is likely the result of something I'm doing but I thought I'd see if anyone else had ideas.

    Crashed: com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x00000010

    Here's the stacktrace

    Thread : Crashed: com.apple.main-thread
    0  libobjc.A.dylib                0x00000001950ac0b4 objc_retain + 20
    1  ETM iOS App                    0x000000010018f02c -[GHWalkThroughView crossDissolveForOffset:] (GHWalkThroughView.m:251)
    2  ETM iOS App                    0x000000010018ee20 -[GHWalkThroughView scrollViewDidScroll:] (GHWalkThroughView.m:219)
    3  UIKit                          0x000000018858fbbc -[UIScrollView(UIScrollViewInternal) _notifyDidScroll] + 72
    4  UIKit                          0x00000001882ccdb4 -[UIScrollView setContentOffset:] + 500
    5  UIKit                          0x000000018845b140 -[UIScrollView _updatePanGesture] + 1684
    6  UIKit                          0x00000001884470dc _UIGestureRecognizerSendActions + 276
    7  UIKit                          0x00000001882e0720 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 580
    8  UIKit                          0x00000001887514fc ___UIGestureRecognizerUpdate_block_invoke662 + 60
    9  UIKit                          0x00000001882a4484 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 292
    10 UIKit                          0x00000001882a2830 _UIGestureRecognizerUpdate + 2504
    11 UIKit                          0x00000001882de898 -[UIWindow _sendGesturesForEvent:] + 1044
    12 UIKit                          0x00000001882ddf50 -[UIWindow sendEvent:] + 660
    13 UIKit                          0x00000001882b118c -[UIApplication sendEvent:] + 264
    14 UIKit                          0x0000000188552324 _UIApplicationHandleEventFromQueueEvent + 15424
    15 UIKit                          0x00000001882af6a0 _UIApplicationHandleEventQueue + 1716
    16 CoreFoundation                 0x0000000183828240 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
    17 CoreFoundation                 0x00000001838274e4 __CFRunLoopDoSources0 + 264
    18 CoreFoundation                 0x0000000183825594 __CFRunLoopRun + 712
    19 CoreFoundation                 0x00000001837512d4 CFRunLoopRunSpecific + 396
    20 GraphicsServices               0x000000018cf676fc GSEventRunModal + 168
    21 UIKit                          0x0000000188316fac UIApplicationMain + 1488
    22 ETM iOS App                    0x00000001000d7918 main (main.m:16)
    23 libdyld.dylib                  0x0000000195712a08 start + 4
    

    We have a tab view controller in our app with several walkthroughs in different tabs and based on logging of the 2 times it's happened it's been when users view multiple walkthroughs in different tabs. I suspect crossDissolveForOffset is getting called on the wrong walkthrough object that has already been deallocated however if that was the case I would've expected it to crash on [GHWalkThroughView scrollViewDidScroll:] when it tried to access the walkthrough object the first time. The issue is extremely rare and I've been unable to repro so maybe it's a race condition when switching tabs with walkthroughs.

    Any ideas/advice would be appreciated :)

    opened by pmaccamp 1
  • Need images that are proper 4

    Need images that are proper 4" size

    It would be great if you could supply the static_bg image in 640x1136 instead of the old 3.5" dimensions. Note that some of your backgrounds are this size, others are the 3.5" too.

    Also, can you add a link to the README as to where the Octocat images can be found online?

    opened by dhoerl 1
  • - replaced all occurrences of self.frame with self.bounds, since this is...

    - replaced all occurrences of self.frame with self.bounds, since this is...

    ... what was actually intended. This way the view layout is correct when presenting walkthrough NOT in full screen (which is useful, especially on the iPad)

    opened by stkhapugin 0
  • fix aspect ratio of title image & better look in iOS 6

    fix aspect ratio of title image & better look in iOS 6

    this are two minor changes: one fixes(changes) the content mode setting of the title image view (avoid resizing in nin- aspect ratio), the other gives the button a better (more consistent) look in iOS 6

    opened by sononum 0
  • Augmented Page Control Logic

    Augmented Page Control Logic

    Now the page control updates as soon as you're closer to the next page than the current.

    This has the added benefit of fixing a bug where rapid/erratic scrolling could cause the page control to get out of whack.

    opened by GregularExpressions 0
  • Delegate dismiss method and closeTitle string method

    Delegate dismiss method and closeTitle string method

    I just came across this problem to know when the user closes the view, also I needed to set a custom 'Close title' in order to replace the string 'Skip' in my local language.

    opened by christianroman 0
  • Fix broken headings in Markdown files

    Fix broken headings in Markdown files

    GitHub changed the way Markdown headings are parsed, so this change fixes it.

    See bryant1410/readmesfix for more information.

    Tackles bryant1410/readmesfix#1

    opened by bryant1410 0
  • Not working in ios9

    Not working in ios9

    Hey thanks for the code :)

    This code is working fine for ios9 but this not working in ios9.0.2

    and my code is:

        [_ghView setFloatingHeaderView:nil];
        self.ghView.isfixedBackground = YES;
        self.ghView.bgImage = [UIImage imageNamed:@"Tut_BG.png"];
        [self.ghView setWalkThroughDirection:GHWalkThroughViewDirectionHorizontal];
        [self.ghView showInView:self.navigationController.view animateDuration:0.3];
    

    any help??

    opened by purnimaSingh 1
  • Push to viewcontroller

    Push to viewcontroller

    Hi, Firstly, thank u for code :+1:

    I added a new button on GHWalkThroughView.m. I can't push a new viewcontroller. Why can't I open a new viewcontroller on main.storyboard with button clicked? Can u help me?

    opened by sirketing 1
  • Avoid changing the page by tapping left or right to the pageControl

    Avoid changing the page by tapping left or right to the pageControl

    Tapping left or right to the pageControl was causing the indicator to move but not the page to change, so the easiest solution would be to disable that interaction so the user is forced to use the swipe gesture as expected.

    opened by ebetabox 0
Owner
Gnosis Hub
Gnosis Hub
Swift Actors Introduction

Swift-Actors-Introduction Swift 5.5~ 並行処理におけるデータ整合やその他の不具合を防ぐための仕組み。 https://doc

Sho Emoto 0 Jan 3, 2022
Highly customizable drop-in solution for introduction views.

EAIntroView - simple iOS Introductions This is highly customizable drop-in solution for introduction views. Some features (remember, most features are

Evgeny Aleksandrov 3.8k Dec 17, 2022
This component allows for the transfer of data items between collection views through drag and drop

Drag and Drop Collection Views Written for Swift 4.0, it is an implementation of Dragging and Dropping data across multiple UICollectionViews. Try it

Michael Michailidis 508 Dec 19, 2022
This component allows for the transfer of data items between collection views through drag and drop

Drag and Drop Collection Views Written for Swift 4.0, it is an implementation of Dragging and Dropping data across multiple UICollectionViews. Try it

Michael Michailidis 508 Dec 19, 2022
Awesome Cache Delightful on-disk cache (written in Swift). Backed by NSCache for maximum performance

Awesome Cache Delightful on-disk cache (written in Swift). Backed by NSCache for maximum performance and support for expiry of single objects. Usage d

Alexander Schuch 1.3k Dec 29, 2022
SwiftStore - Key/Value store for Swift backed by LevelDB.

SwiftStore Key/Value store for Swift backed by LevelDB. Usage Create instances of store import SwiftStore

Hemant Sapkota 119 Dec 21, 2022
Key-Value store for Swift backed by LevelDB

SwiftStore Key/Value store for Swift backed by LevelDB. Usage Create instances of store import SwiftStore // Create a store. let store = SwiftStore(s

Hemanta Sapkota 119 Dec 21, 2022
C-backed AudioKit DSP

AudioKitEX This extension to AudioKit contains all of the AudioKit features that rely on C/C++ DSP. Documentation The documentation appears in the Wik

AudioKit 27 Jan 1, 2023
A Flutter tourism app that is backed-by Redux, shows animations, internationalization (i18n, English <=> Arabic), ClipPath, and fonts

A Flutter tourism app that is backed-by Redux, shows animations, internationalization (i18n, English <=> Arabic), ClipPath, and fonts. YouTube demo I

Abdulmomen Kadum عبدالمؤمن كاظم 277 Dec 28, 2022
Detailed explanations and implementations of various maths concepts for writing high performance code/algorithms backed with Unit tests.

Detailed explanations and implementations of various maths concepts which can help software Engineers write high performance code/algorithms backed with Unit tests.

Mussa Charles 2 Sep 25, 2022
An iOS drop-in UITableView, UICollectionView and UIScrollView superclass category for showing a customizable floating button on top of it.

MEVFloatingButton An iOS drop-in UITableView, UICollectionView, UIScrollView superclass category for showing a customizable floating button on top of

Manuel Escrig 298 Jul 17, 2022
A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display

DZNEmptyDataSet Projects using this library Add your project to the list here and provide a (320px wide) render of the result. The Empty Data Set Patt

Ignacio Romero Zurbuchen 12.1k Jan 8, 2023
An unofficial version of the Sandwiches app and pre-built materials similar to those used in the Introduction to SwiftUI session video from WWDC20

Unofficial Sandwiches The WWDC20 Session Introduction to SwiftUI provides a tutorial-like walk-through of building a list-detail SwiftUI app from scra

James Dempsey 94 Feb 11, 2022
Swift IOS App introduction project

Swifty Companion This project aims to introduce you to the development of iOS application. About With the help of 42 API, get a student's profile deta

null 0 Nov 13, 2021
An introduction to using Swift's new concurrency features in SwiftUI

SwiftUI Concurrency Essentials An introduction to using Swift's new concurrency features in SwiftUI Discuss with me · Report Bug · Request Feature Art

Peter Friese 80 Dec 14, 2022
Final project of Introduction to Swift course

Final project of Introduction to Swift course This project summarizes the concepts viewed on class, from simple variable creations, loops and conditio

Fernando López López 0 Dec 12, 2021
Swift Actors Introduction

Swift-Actors-Introduction Swift 5.5~ 並行処理におけるデータ整合やその他の不具合を防ぐための仕組み。 https://doc

Sho Emoto 0 Jan 3, 2022
Carbon🚴 A declarative library for building component-based user interfaces in UITableView and UICollectionView.

A declarative library for building component-based user interfaces in UITableView and UICollectionView. Declarative Component-Based Non-Destructive Pr

Ryo Aoyama 1.2k Jan 5, 2023
🚴 A declarative library for building component-based user interfaces in UITableView and UICollectionView.

A declarative library for building component-based user interfaces in UITableView and UICollectionView. Declarative Component-Based Non-Destructive Pr

Ryo Aoyama 1.2k Jan 5, 2023
WLEmptyState is an iOS based component that lets you customize the view when the dataset of a UITableView or a UICollectionView is empty.

Table of Content Overview Running an Example Project Installing WLEmptyState Configuring WLEmptyState Using WLEmptyState Customizing WLEmptyState Cont

Wizeline 315 Dec 5, 2022