Skip to content

Commit

Permalink
Fix some error, and improvement animate
Browse files Browse the repository at this point in the history
  • Loading branch information
iWECon committed Dec 1, 2022
1 parent 1dea74b commit d0779bd
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 48 deletions.
79 changes: 49 additions & 30 deletions Demo/Marker/Base.lproj/Main.storyboard

Large diffs are not rendered by default.

24 changes: 16 additions & 8 deletions Demo/Marker/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,27 @@ class ViewController: UIViewController {
@IBOutlet weak var clickableInButton: UIButton!
@IBOutlet weak var clickableOutButton: UIButton!

@objc func dismissBarButtonMarkerAction(_ sender: UIButton) {
Marker.instance(from: "nav-bar-marker")?.dismiss()
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.backgroundColor = .white

let barButton = UIButton(type: .custom)
barButton.setTitle("OnBarButton", for: .normal)
barButton.setTitleColor(.black, for: .normal)
barButton.addTarget(self, action: #selector(dismissBarButtonMarkerAction(_:)), for: .touchUpInside)
let item = UIBarButtonItem(customView: barButton)
self.navigationItem.rightBarButtonItem = item

DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1) {
Marker(Marker.Info(marker: barButton, intro: "Show on navigation bar. tap highlight range to dismiss.", styles: [.spacing(-10)], options: [.decoration]), identifier: "nav-bar-marker")
.show(on: self.view)
}

startButton.addTarget(self, action: #selector(tapAction(sender:)), for: .touchUpInside)

let buttons = [startButton, number2Button, respondActionButton, noMaskButton, roundButton, squareButton, followStyleButton, bottomButton, bottomButton] + bottomButtons
Expand Down Expand Up @@ -82,14 +98,6 @@ class ViewController: UIViewController {
Marker(info, identifier: "inSubview").show(on: subviewContainer, completion: nil)
}

@objc func topLeftAlert(sender: UIButton) {
let alert = UIAlertController(title: "提示", message: "透传事件", preferredStyle: .alert)
alert.addAction(.init(title: "确认", style: .default, handler: nil))
present(alert, animated: true, completion: nil)

Marker.instance(from: "asdf")?.dismiss(triggerByUser: true)
}

@objc func tapAction(sender: UIButton) {
// global configure. Use it in AppDelegate.swift(application.didFinishLaunchingWithOptions), if needed
// 全局配置, 如果需要, 可以在应用启动时进行配置, 这里仅作为演示
Expand Down
2 changes: 1 addition & 1 deletion Sources/Marker/Marker+Calculate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ extension Marker {
return nil
}

self.spacing = Marker.default.spacing
self.spacing = info.spacing
self.innerFrame = markedSuperview.convert(marked.frame, to: onView)
self.isRound = marked.layer.cornerRadius == innerFrame.height / 2
self.markerFrame = info.dimFrame == .zero ? .zero : innerFrame.insetBy(dx: -info.enlarge, dy: -info.enlarge)
Expand Down
11 changes: 6 additions & 5 deletions Sources/Marker/Marker+Draw.swift
Original file line number Diff line number Diff line change
Expand Up @@ -107,16 +107,17 @@ extension Marker {
}

// MARK: check and fix origin.x
if gradientRect.minX < 10 { // horizontally safe area
var gradientRectAtWindow = self.convert(gradientRect, to: nil)
if gradientRectAtWindow.minX < 10 { // horizontally safe area
gradientRect.origin.x = 10
}
if gradientRect.maxX > calculate.safetyRangeSize.width {
if gradientRectAtWindow.maxX > calculate.safetyRangeSize.width {
gradientRect.origin.x = calculate.safetyRangeSize.width - gradientRect.width
}

// MARK: origin.y
let topOriginY: CGFloat = highlightRangeRect.minY - Marker.default.spacing - gradientRect.height - bumpHeight
let bottomOriginY: CGFloat = highlightRangeRect.maxY + Marker.default.spacing + bumpHeight
let topOriginY: CGFloat = highlightRangeRect.minY - calculate.info.spacing - gradientRect.height - bumpHeight
let bottomOriginY: CGFloat = highlightRangeRect.maxY + calculate.info.spacing + bumpHeight

var resultVAlignment: Info.VAlignment = .auto
switch calculate.info.vAlignment {
Expand All @@ -125,7 +126,7 @@ extension Marker {
resultVAlignment = .top

// MARK: check and fix origin.y
let gradientRectAtWindow = self.convert(gradientRect, to: nil)
gradientRectAtWindow = self.convert(gradientRect, to: nil)
if gradientRectAtWindow.minY < 120 {
// display on dynamic island or notch
// switch to `.bottom`
Expand Down
7 changes: 7 additions & 0 deletions Sources/Marker/Marker+Info+Style.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ extension Marker.Info {

case hAlignment(HAlignment)
case vAlignment(VAlignment)

/// Spacing between triangle arrow and highlighted view.
/// Default value see `Marker.default.spacing`.
case spacing(CGFloat)
}

}
Expand Down Expand Up @@ -65,6 +69,9 @@ extension Marker.Info.Style: Equatable {
case (.vAlignment(_), .vAlignment(_)):
return true

case (.spacing(_), .spacing(_)):
return true

default:
return false
}
Expand Down
9 changes: 9 additions & 0 deletions Sources/Marker/Marker+Info.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ extension Marker {
let textColor: UIColor
let timeout: TimeInterval
let enlarge: CGFloat
let spacing: CGFloat

let hAlignment: HAlignment
let vAlignment: VAlignment
Expand Down Expand Up @@ -139,6 +140,14 @@ extension Marker {
self.vAlignment = .auto
}

if let spacingStyle = styles.first(where: { $0 == .spacing(0) }),
case .spacing(let value) = spacingStyle
{
self.spacing = value
} else {
self.spacing = Marker.default.spacing
}

self.isDecoration = options.contains(.decoration)
self.isStrongGuidance = options.contains(.strongGuidance)
self.isEventPenetration = options.contains(.eventPenetration)
Expand Down
13 changes: 9 additions & 4 deletions Sources/Marker/Marker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,11 @@ public class Marker: UIView {
if contentView.frame == .zero {
contentView.alpha = 0
contentView.frame = gradientFrame
contentView.transform = CGAffineTransform(translationX: 0, y: vAlignment == .top ? 20 : -20)
.concatenating(CGAffineTransform(scaleX: 0.95, y: 0.95))
contentView.transform = CGAffineTransform(
translationX: 0,
y: vAlignment == .top ? (current.spacing) : (-current.spacing)
)
.concatenating(CGAffineTransform(scaleX: 0.98, y: 0.98))

UIView.animate(withDuration: animateDuration) {
self.contentView.alpha = 1
Expand Down Expand Up @@ -234,12 +237,14 @@ public extension Marker {
func dismiss(triggerByUser: Bool = true) {
Self.removeInstance(self)

let translationY: CGFloat = self.lastVAlignment == .bottom ? (-current.spacing) : (current.spacing)

UIView.animate(withDuration: animateDuration) {
self.dimmingView.alpha = 0

self.contentView.alpha = 0
self.contentView.transform = CGAffineTransform(translationX: 0, y: self.lastVAlignment == .bottom ? -20 : 20)
.concatenating(CGAffineTransform(scaleX: 0.95, y: 0.95))
self.contentView.transform = CGAffineTransform(translationX: 0, y: translationY)
.concatenating(CGAffineTransform(scaleX: 0.98, y: 0.98))
} completion: { (_) in
self.completion?(self, triggerByUser)
self.completion = nil
Expand Down

0 comments on commit d0779bd

Please sign in to comment.