- ๐'You can take a marker containing content above the
UIScrollView
. - ๐ซ'
THMarkerView
has origin and zoomScale inUIScrollView
so it functions as a camera autopilot to that position. - ๐ฅ
THContentMarkerView
providesTHVideoContentView
,THAudioContentView
,THTextContentView
, andTHTitleContentView
as default content. - ๐If you want to create a content view of your choice, you can make your content view that inherit
THContentView
.
To integrate THContentMarkerView
into your Xcode project using CocoaPods, specify it in your Podfile:
pod "THContentMarkerView"
THContentMarkerView is written in Swift 4, and compatible with iOS 9.0+
THContentMarkerView
can basically be controlled using two data modelsTHMarker
andTHContentSet
.
- THMarker :
THMarker
has marker origin, zoomScale, and contentInfo.zoomScale
: zoomScale to be set toUIScrollView
when the marker is tappedorigin
: Where the marker will be drawn on theUIScrollView
markerID
: Identifier to distinguish markerscontnetInfo
: The key value to enter the content view and the info dictionary
// When creating 'THMarker' with no content
var markerArray = [THMarker]()
func setMarker() {
// set 'THMarker'
markerArray.append(THMarker(zoomScale: CGFloat(3),
origin: CGPoint(x: 1000, y: 1000),
markerID: "markerIdentifier",
contentInfo: [:]))
}
- THContentSet:
THContentSet
hasTHContentView
and the key of the view to use in the project.
(The library providesTHVideoContentView
,THAudioContentView
,THTextContentView
, andTHTitleContentView
by default.)
// 'THContentView' setting
var contentSetArray = [THContentSet]()
func setContentView() {
// key Generation
let videoContentKey = "videoContent"
let audioContentKey = "audioContent"
let titleContentKey = "titleContent"
let textContentKey = "textContent"
// THVideoView set example
let videoContent = THVideoContentView()
let videoFrame = CGRect(x: self.view.center.x - 75, y: self.view.center.y + 80, width: 150, height: 100)
videoContnetKey.setContentView(frame: videoFrame)
contentSetArray.append(THContentSet(contentKey: videoContentKey, contentView: videoContent))
// THAudioContentView set example
let audioContent = THAudioContentView()
audioContent.frame = CGRect(x: 0, y: 200, width: 80, height: 80)
audioContent.setContentView()
contentSetArray.append(THContentSet(contentKey: audioContentKey, contentView: audioContent))
// THTitleContentView set example
let titleContent = THTitleContentView()
titleContent.frame.size = CGSize(width: 100, height: 50)
titleContent.center = self.view.center
titleContent.setView(fontSize: 25)
contentSetArray.append(THContentSet(contentKey: titleContentKey, contentView: titleContent))
// THTextContentView set example
let textContent = THTextContentView()
textContent.frame = CGRect(x: 0, y: self.view.frame.height - self.view.frame.height*(1/5), width: self.view.frame.width, height: self.view.frame.height*(1/5))
textContent.setContentView(upYFloat: 180)
contentSetArray.append(THContentSet(contentKey: textContentKey, contentView: textContent))
}
- If you want to show the required content, you can make content view that inherit 'THContentView'.
// 'THContentView' creation example
public class THExampleContentView: THContentView {
public setExampleContent {
// Sets the delegate for the content view.
delegate = self
}
}
extension THExampleContentView: THContentViewDelegate {
public func setContent(info: Any?) {
// Setting up contentInfo in content view
}
public func dismiss() {
// When you dismiss the content
}
}
- Call
THContentMarkerController
and implement dataSource, delegate.
class ViewController: UIViewController {
var contentMarkerController = THContentMarkerController()
// Work data in 'THContentMarkerController'
var markerArray = [THMarker]()
var contentSetArray = [THContentSet]()
override func viewDidLoad() {
super.viewDidLoad()
contentMarkerController.dataSource = self
contentMarkerController.delegate = self
contentMarkerController.set(parentView: self.view, scrollView: self.scrollView)
// Data set implemented above
setMarker()
setContentView()
}
}
// 'THContentMarkerControllerDataSource' returns 'THMarker' and 'THContentSet'
extension ViewController: THContentMarkerControllerDataSource {
func numberOfMarker(_ contentMarkerController: THContentMarkerController) -> Int {
return markerArray.count
}
func setMarker(_ contentMarkerController: THContentMarkerController, markerIndex: Int) -> THMarker {
return markerArray[markerIndex]
}
func numberOfContent(_ contentMarkerController: THContentMarkerController) -> Int {
return contentSetArray.count
}
func setContentView(_ contentMarkerController: THContentMarkerController, contentSetIndex: Int) -> THContentSet {
return contentSetArray[contentSetIndex]
}
}
// In 'THContentMarkerControllerDelegate', you can implement the event when the marker is clicked.
extension ViewController: THContentMarkerControllerDelegate {
func markerTap(_ contentMarkerController: THContentMarkerController, markerView: THMarkerView) {
// If you want the marker to disappear when you select a marker, add below code.
contentMarkerController.markerHidden(bool: true)
}
}
set(parentView: UIView, scrollView: UIScrollView)
: Sets theUIScrollView
on which the marker will be drawn and aUIView
to show the content.reloadData()
: IfTHMarker
is added or deleted, use reloadData () to reload the data intoTHContentMarkerController
.setMarkerFrame()
: When the marker is on the 'UIScrollView', it changes the frame of the marker depending on whether it is zooming or not.markerHidden(bool: Bool)
: Determines whether the marker is Hidden.contentDismiss()
: Dismiss the content view of the marker.markerViewSize
: You can specify the size of the marker.markerViewImage
: You can specify the image of the marker.
THContentMarkerView
is released under the MIT license. See LICENSE for details.