Latest 1.0.1
Homepage https://github.com/rashwanlazkani/RHScroll
License MIT
Platforms ios 10.0
Frameworks UIKit
Authors

CI Status
Version
License
Platform

About

RHScroll is a ScrollView similar to several famous apps out on the App Store. It creates in a simple way a horizontal ScrollView which can be used for several different purposes. You´re able to choose the size of the ScrollView, size of the items, the data and the positioning of everything. It has built in animations and notifications for tap and longPress gestures. You can add views, labels and images (see examples below).

Here is how it looks:

Regular:

RHScroll

Circles:

drawing

Functions

RHScrollView have two functions that can be called:

  1. func createFor(_ views: [RHView], frame: CGRect, itemSize: CGSize) -> RHScrollView { ... } which returns a RHScrollView – with the choosen views and on the selected frame.

  2. func createFor(_ labels: [RHLabel], frame: CGRect, itemSize: CGSize) -> RHScrollView { ... } which returns a RHScrollView – with the choosen labels and on the selected frame.

Implementation

To implement RHScrollView in your view do the following:

Step 1 – subscribe to clicks

In your viewDidLoad subscribe to the following Notification:

NotificationCenter.default.addObserver(self, selector: #selector(rhScrollViewDidSelect), name: Notification.Name(RHConst.didSelect), object: nil)

This is used for notification whenever an item is selected in the ScrollView. Then declare the function for the Notification:

@objc private func rhScrollViewDidSelect(notification: Notification) {
  if let object = notification.object as? [String: Any], let scrollViewTag = object[RHConst.scrollViewTag] as? Int, let itemTag = object[RHConst.itemTag] as? Int, let longPressGestureMax = object[RHConst.longPressGestureMax] as? Bool {
    if longPressGestureMax {
      // Here you can for instance show an actionSheet
    }   
  }
}

In this function there are three variables:
scrollViewTag – this is used if you have more than one ScrollView, so that you know which ScrollView that is active
itemTag – which item that has been selected in the ScrollView
longPressGestureMax – if the user has selected the item with a long press which is called after 0.5 seconds, then this is true

Step 2 – Create the ScrollView for the different kind of data

Views and images

let views = [RHView(backgroundColor: .green), RHView(backgroundColor: .gray), RHView(backgroundColor: .orange), RHView(backgroundColor: .black), RHView(backgroundColor: .magenta)]

let frame = CGRect(x: 16, y: 200, width: self.view.frame.maxX - 32, height: 75)
let size = CGSize(width: 100, height: 65)

let scrollView = rhScrollView.createFor(images, frame: frame, itemSize: size)
self.view.addSubview(scrollView)

Labels

let labels = [RHLabel(text: "First"), RHLabel(text: "Second"), RHLabel(text: "Third"), RHLabel(text: "Fourth")]

let frame = CGRect(x: 16, y: 300, width: self.view.frame.maxX - 32, height: 75)
let size = CGSize(width: 100, height: 65)

let scrollView = rhScrollView.createFor(labels, frame: frame, itemSize: size) // if you want it round you can also pass the following parameter: isRound: true at the end.
self.view.addSubview(scrollView)

That is all that is needed to create the ScrollView.

Full example with a RHScroll containing views

import RHScroll
import UIKit

class ViewController: UIViewController {
  let rhScrollView = RHScrollView()

override func viewDidLoad() {
  super.viewDidLoad()

  NotificationCenter.default.addObserver(self, selector: #selector(rhScrollDidSelect), name: Notification.Name(RHConst.didSelect), object: nil)

    create()
  }

  func create() {
        let views = [RHView(backgroundColor: .green), RHView(backgroundColor: .black), RHView(backgroundColor: .blue), RHView(backgroundColor: .yellow)]

        let frame = CGRect(x: 16, y: 400, width: self.view.frame.maxX - 32, height: 75)
        let size = CGSize(width: 100, height: 65)

        let scrollView = rhScrollView.createFor(views, frame: frame, itemSize: size) // if you want it round you can also pass the following parameter: isRound: true at the end.
        self.view.addSubview(scrollView)
    }

    @objc private func rhScrollDidSelect(notification: Notification) {
        if let object = notification.object as? [String: Any], let scrollViewTag = object[RHConst.scrollViewTag] as? Int, let itemTag = object[RHConst.itemTag] as? Int, let longPressGestureMax = object[RHConst.longPressGestureMax] as? Bool {
            if longPressGestureMax {
                // Here you can for instance show an actionSheet
                print("long press on (scrollViewTag) and item (itemTag)")
            } else {
                print("tap on (scrollViewTag) and item (itemTag)")
            }
        }
    }
}

Requirements

Installation

RHScrollView is available through CocoaPods. To install
it, simply add the following line to your Podfile:

pod 'RHScroll'

Author

rashwanlazkani, [email protected]

License

RHScrollView is available under the MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "RHScroll",
    "version": "1.0.1",
    "summary": "With RHScroll you have a horizontal ScrollView with built in animations and notifications for tap and longPress gestures.",
    "swift_version": "4.2",
    "description": "RHScroll  is a ScrollView similar to several famous apps out on the App Store. It creates in a simple way a horizontal ScrollView which can be used for several different purposes. Youu00b4re able to choose the size of the ScrollView, size of the items, the data and the positioning of everything. It has built in animations for tap and longPress.",
    "homepage": "https://github.com/rashwanlazkani/RHScroll",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "rashwanlazkani": "[email protected]"
    },
    "source": {
        "git": "https://github.com/rashwanlazkani/RHScroll.git",
        "tag": "1.0.1"
    },
    "platforms": {
        "ios": "10.0"
    },
    "source_files": "RHScroll/Classes/*.swift",
    "frameworks": "UIKit"
}

Pin It on Pinterest

Share This