Skip to content

Commit

Permalink
Make notice configuration optional (#11)
Browse files Browse the repository at this point in the history
Notice configuration as a whole is now optional (#11). In addition, one can also set up notice elements based on their own needs: All elements, except the notice text, are now optional.

This version also fixes oversized notice icons by improving constraint layout rules (#7).
  • Loading branch information
lascic committed Jan 29, 2023
1 parent 985953d commit f8d0daa
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ struct UIOnboardingHelper {
}

static func setUpNotice() -> UIOnboardingTextViewConfiguration {
return .init(icon: .init(named: "onboarding-notice-icon")!,
return .init(icon: .init(named: "onboarding-notice-icon"),
text: "Developed and designed for members of the Swiss Armed Forces.",
linkTitle: "Learn more...",
link: "https://www.lukmanascic.ch/portfolio/insignia",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ struct UIOnboardingHelper {
}

static func setUpNotice() -> UIOnboardingTextViewConfiguration {
return .init(icon: .init(named: "onboarding-notice-icon")!,
return .init(icon: .init(named: "onboarding-notice-icon"),
text: "Developed and designed for members of the Swiss Armed Forces.",
linkTitle: "Learn more...",
link: "https://www.lukmanascic.ch/portfolio/insignia",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
import UIKit

public struct UIOnboardingTextViewConfiguration {
public var icon: UIImage
public var icon: UIImage?
public var text: String
public var linkTitle: String?
public var link: String?
public var tint: UIColor?

public init(icon: UIImage,
public init(icon: UIImage? = nil,
text: String,
linkTitle: String? = nil,
link: String? = nil,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ public struct UIOnboardingViewConfiguration {
public var firstTitleLine: NSMutableAttributedString
public var secondTitleLine: NSMutableAttributedString
public var features: Array<UIOnboardingFeature>
public var textViewConfiguration: UIOnboardingTextViewConfiguration
public var textViewConfiguration: UIOnboardingTextViewConfiguration? = nil
public var buttonConfiguration: UIOnboardingButtonConfiguration

public init(appIcon: UIImage,
firstTitleLine: NSMutableAttributedString,
secondTitleLine: NSMutableAttributedString,
features: Array<UIOnboardingFeature>,
textViewConfiguration: UIOnboardingTextViewConfiguration,
textViewConfiguration: UIOnboardingTextViewConfiguration? = nil,
buttonConfiguration: UIOnboardingButtonConfiguration) {
self.appIcon = appIcon
self.firstTitleLine = firstTitleLine
Expand Down
44 changes: 31 additions & 13 deletions Sources/UIOnboarding/UIOnboardingViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public final class UIOnboardingViewController: UIViewController {
private var continueButtonHeight: NSLayoutConstraint!
private var continueButtonBottom: NSLayoutConstraint!

private var onboardingTextView: UIOnboardingTextView!
private var onboardingTextView: UIOnboardingTextView?
private var onboardingNoticeIcon: UIImageView!

private lazy var statusBarHeight: CGFloat = getStatusBarHeight()

Expand Down Expand Up @@ -58,7 +59,7 @@ public final class UIOnboardingViewController: UIViewController {
}

deinit {
debugPrint("UIOnboardingViewController: deinit {}")
print("UIOnboardingViewController: deinit {}")
}

public override func viewDidLoad() {
Expand Down Expand Up @@ -100,14 +101,13 @@ public final class UIOnboardingViewController: UIViewController {
continueButton.titleLabel?.font = UIFontMetrics.default.scaledFont(for: .systemFont(ofSize: traitCollection.horizontalSizeClass == .regular ? 19 : 17, weight: .bold))

if #available(iOS 15.0, *) {
onboardingTextView.font = UIFontMetrics.default.scaledFont(for: .systemFont(ofSize: traitCollection.horizontalSizeClass == .regular ? 15 : 13))
onboardingTextView.maximumContentSizeCategory = .accessibilityMedium
onboardingTextView?.font = UIFontMetrics.default.scaledFont(for: .systemFont(ofSize: traitCollection.horizontalSizeClass == .regular ? 15 : 13))
onboardingTextView?.maximumContentSizeCategory = .accessibilityMedium
} else {
onboardingTextView.font = UIFontMetrics.default.scaledFont(for: .systemFont(ofSize: traitCollection.horizontalSizeClass == .regular ? 15 : 13), maximumPointSize: traitCollection.horizontalSizeClass == .regular ? 21 : 19)
onboardingTextView?.font = UIFontMetrics.default.scaledFont(for: .systemFont(ofSize: traitCollection.horizontalSizeClass == .regular ? 15 : 13), maximumPointSize: traitCollection.horizontalSizeClass == .regular ? 21 : 19)
}

needsUIRefresh = true
onboardingTextView.layoutIfNeeded()
onboardingTextView?.layoutIfNeeded()
continueButton.layoutIfNeeded()
}
}
Expand Down Expand Up @@ -207,13 +207,31 @@ private extension UIOnboardingViewController {
}

func setUpOnboardingTextView() {
onboardingTextView = .init(withConfiguration: configuration.textViewConfiguration)
bottomOverlayView.addSubview(onboardingTextView)
guard let textViewConfiguration: UIOnboardingTextViewConfiguration = configuration.textViewConfiguration else {
continueButton.topAnchor.constraint(equalTo: bottomOverlayView.topAnchor, constant: 32).isActive = true
return
}

if let icon = textViewConfiguration.icon {
onboardingNoticeIcon = .init(image: icon.withRenderingMode(.alwaysTemplate))
onboardingNoticeIcon.tintColor = .secondaryLabel
onboardingNoticeIcon.contentMode = .scaleAspectFit
onboardingNoticeIcon.translatesAutoresizingMaskIntoConstraints = false

bottomOverlayView.addSubview(onboardingNoticeIcon)
onboardingNoticeIcon.topAnchor.constraint(equalTo: bottomOverlayView.topAnchor, constant: 16).isActive = true
onboardingNoticeIcon.centerXAnchor.constraint(equalTo: bottomOverlayView.centerXAnchor).isActive = true
onboardingNoticeIcon.heightAnchor.constraint(equalToConstant: 16).isActive = true
onboardingNoticeIcon.widthAnchor.constraint(equalToConstant: 16).isActive = true
}

onboardingTextView.bottomAnchor.constraint(equalTo: continueButton.topAnchor).isActive = true
onboardingTextView.leadingAnchor.constraint(equalTo: continueButton.leadingAnchor).isActive = true
onboardingTextView.trailingAnchor.constraint(equalTo: continueButton.trailingAnchor).isActive = true
onboardingTextView.topAnchor.constraint(equalTo: bottomOverlayView.topAnchor, constant: 16).isActive = true
onboardingTextView = .init(withConfiguration: textViewConfiguration)
bottomOverlayView.addSubview(onboardingTextView!)

onboardingTextView!.bottomAnchor.constraint(equalTo: continueButton.topAnchor).isActive = true
onboardingTextView!.leadingAnchor.constraint(equalTo: continueButton.leadingAnchor).isActive = true
onboardingTextView!.trailingAnchor.constraint(equalTo: continueButton.trailingAnchor).isActive = true
onboardingTextView!.topAnchor.constraint(equalTo: onboardingNoticeIcon != nil ? onboardingNoticeIcon.bottomAnchor : bottomOverlayView.topAnchor, constant: onboardingNoticeIcon != nil ? 16 : 32).isActive = true
}

func startOnboardingAnimation(completion: (() -> Void)?) {
Expand Down
9 changes: 1 addition & 8 deletions Sources/UIOnboarding/Views/UIOnboardingTextView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,10 @@ final class UIOnboardingTextView: UITextView {
self.configuration = configuration
super.init(frame: .zero, textContainer: nil)

let icon: NSTextAttachment = .init()
let symbol = configuration.icon
icon.image = symbol
icon.image = icon.image?.withTintColor(.secondaryLabel)

let logoImageText: NSAttributedString = .init(attachment: icon)
let text: NSMutableAttributedString = .init()
text.append(logoImageText)

let noticeText = configuration.text
text.append(.init(string: "\n\n\(noticeText)"))
text.append(.init(string: "\(noticeText)"))

if let noticeLink = configuration.link, let noticeLinkTitle = configuration.linkTitle {
text.append(.init(string: " \(noticeLinkTitle)"))
Expand Down

0 comments on commit f8d0daa

Please sign in to comment.