Skip to content

Latest commit

 

History

History
68 lines (41 loc) · 2.17 KB

README.md

File metadata and controls

68 lines (41 loc) · 2.17 KB

SetNeedsDisplay

Tests

This package provides property wrappers that can be used on properties for any NSView or UIView to invalidate the layout or display whenever the value of said property is changed.

Note: This code contains some private Swift API stuff that powers @Published so there's a strong likelihood this will break in the future.

Usage

Annotate your property of a type that conforms to Equatable like so:

class MyView: UIView {

    // Anytime someCustomProperty is changed, `-setNeedsDisplay` will be called.
    @SetNeeds(.display) var someCustomProperty: CGFloat = 0.0


    // Anytime someOtherCustomProperty is changed, `-setNeedsLayout` will be called.
    @SetNeeds(.layout) var someOtherCustomProperty: CGFloat = 0.0


    // Anytime oneLastProperty is changed, `-setNeedsDisplay` and `-setNeedsLayout` will be called.
    @SetNeeds(.display, .layout) var oneLastProperty: CGFloat = 0.0

}

Installation

Requirements

  • iOS 13+, macOS 10.15+
  • Swift 5.0 or higher

Currently SetNeedsDisplay supports Swift Package Manager (or manually adding SetNeedsDisplay.swift to your project).

Swift Package Manager

Add the following to your Package.swift (or add it via Xcode's GUI):

.package(url: "https://github.com/b3ll/SetNeedsDisplay", from: "0.0.1")

License

SetNeedsDisplay is licensed under the BSD 2-clause license.

Thanks

Thanks to @harlanhaskins and @hollyborla for helping point me in the right direction and explain the complexity that this sort of solution entails.

More info here.

Contact Info

Feel free to follow me on twitter: @b3ll!