1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/czz_8023-ZZToolKit

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ZZToolKit

Description

ZZToolKit is a set of custom tools containing extensions to properties of various commonly used classes and some custom components.

Class ZZTool

Contains various basic methods for obtaining properties```swift /// Цвет public func RGB(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1) -> UIColor @available(iOS 8.2, *) public func FontSize(size: CGFloat, weight: UIFont.Weight) -> UIFont //@available(iOS, introduced: 6.0, deprecated: 8.2) public func FontSize(size: CGFloat) -> UIFont public func FontBoldSize(size: CGFloat) -> UIFont /// UUID public var uuidString: String /// Главное окно public var keyWindow: UIWindow? /// Название телефона public var phoneName: String /// Название устройства public var systemName: String /// Версия системы устройства public var systemVersion: String /// Версия приложения public var appVersion: String /// Build приложения public var appBuild: String /// Название приложения public var appName: String /// Является ли iPhone X public var isIPhoneX: Bool /// Является ли iPhone 5 или ниже public var isIphone5OrLess: Bool /// Является ли iPad public var isIpad: Bool /// Является ли iPhone public var isIphone: Bool /// Является ли темная тема public var isDarkMode: Bool /// Является ли Retina public var isRetina: Bool /// Ширина экрана public var screenWidth: CGFloat /// Высота экрана public var screenHeight: CGFloat /// Наибольшая сторона экрана public var screenMaxLength: CGFloat /// Наименьшая сторона экрана public var screenMinLength: CGFloat /// Отношение сторон экрана public var screenMinScale: CGFloat /// Высота строки состояния public var statusBarHeight: CGFloat /// Высота навигационной панели public let navigationBarHeight: CGFloat /// Дополнительная высота внизу для iPhone X public let safeAreaHeight: CGFloat /// Высота панели TabBar public let tabBarHeight: CGFloat /// Путь к файлу public func fileBundle(name: String, type: String) -> String? /// documents public func fileDocuments() -> String /// Имя файла в documents public func fileDocumentsFilename(_ filename: String) -> String /// Преобразование строки в URL

```markdown
### Расширенные свойства класса
#### 1\. `UIWindow`
```swift
```swift
func visibleViewController() -> UIViewController?
static func getVisibleViewController(from viewCtrl: UIViewController) -> UIViewController
Получение текущего отображаемого контроллера
static func getCurrentViewController() -> UIViewController
```#### 2\. UIViewController
```swift
public var naviBarBgImage: UIImage?
public var shadowImage: UIImage?
public var titleColor: UIColor?
public var titleFont: UIFont?

3. UIScrollView реализует эффект прокрутки главной страницы приложения Alipay iOS

/// Устанавливает верхнее отображаемое окно. Высота будет автоматически корректироваться после установки `zz_headerViewHeight`. Ширина также будет автоматически корректироваться.
var zz_topView: UIView?
/// Высота отображаемого верхнего окна
var zz_topViewHeight: CGFloat
/// Ширина отображаемого верхнего окна
var zz_topViewWidth: CGFloat
/// Высота отображаемого верхнего окна после того как оно выходит за пределы экрана
var zz_topViewShowHeight: CGFloat
/// Признак того, что верхнее окно всегда остается вверху при прокрутке вниз
var isBindingTop: Bool
```#### 4\. `UIAlertController`

```swift
@discardableResult static func show(actions:[UIAlertAction], viewCtrl:UIViewController, view:UIView?, title:String?, message:String?, style:UIAlertController.Style) -> UIAlertController
Отображение системного диалогового окна Alert
/// Отображение системного диалогового окна Alert
/// - Параметры:
///   - alert: массив объектов UIAlertAction
///   - viewCtrl: контроллер для вызова метода presentViewController
///   - view: положение отображения
///   - title: заголовок
///   - message: сообщение
static func show(alert:[UIAlertAction], viewCtrl:UIViewController, view:UIView?, title:String?, message:String?)
/// Отображение системного диалогового окна Alert
/// - Параметры:
///   - title: заголовок
///   - message: сообщение
///   - okTitle: заголовок кнопки "OK"
///   - handler: обработчик события нажатия кнопки
static func show(title: String?, message: String?, okTitle: String?, handler: ((UIAlertAction) -> Void)? = nil)
/// Отображение системного ActionSheet
/// - Параметры:
///   - actionSheet: массив объектов UIAlertAction
///   - viewCtrl: контроллер для вызова метода presentViewController
///   - view: положение отображения
///   - title: заголовок
///   - message: содержание
static func show(actionSheet:[UIAlertAction], viewCtrl:UIViewController, view:UIView?, title:String?, message:String?)
/// Отображение системного окна
/// - Параметры:
///   - titles: данные объектов кнопок titles
///   - viewCtrl: контроллер для вызова метода presentViewController
///   - view: положение отображения
///   - title: заголовок
///   - message: содержание
///   - style: стиль
///   - titleBlock: callback для titles Обработка названий кнопок внутри titles
///   - clickBlock: вызывается при клике на кнопку выбора
``````markdown
#### 5\. NSString  
    var md5: String
    var lastString: String
    var firstString: String
    func substring(from index: Int) -> String 
    func substring(to index: Int) -> String
    func substring(range index: NSRange) -> String
    func hidden(range index: NSRange, replace: String = "*") -> String
    func jsonFormatPrint() -> String
    func intValue() -> Int
    /// Проверяет, является ли строка номером телефона
    func isPhone() -> Bool 
    /// Проверяет, является ли строка городским телефоном
##### Отображает системное окно
###### Параметры:
- **titles**: данные объектов кнопок titles
- **viewCtrl**: `presentViewController`
- **view**: позиция отображения
- **title**: заголовок
- **message**: содержание
- **style**: стиль
- **titleBlock**: callback для titles; обработка названий кнопок внутри titles
- **clickBlock**: вызывается при клике на кнопку выбора

##### Отображает Alert без кнопок
###### Параметры:
- **showTime**: если равно `nil`, то автоматически скрывается через 2 секунды после открытия
```    func isTelPhone() -> Bool 
     /// Проверяет, является ли строка номером телефона
     func isIdCard() -> Bool
     /// Проверяет, является ли строка номером паспорта
     func isCode_6()  -> Bool
     /// Проверяет, является ли строка шестизначным кодом
     func isLength(minLength:Int, maxLength:Int)  -> Bool#### 6\. UIImage  
     /// Получает изображение UIImage. init(named: name)
     static func named(name: String) -> UIImage?
     /// Получает изображение name(String) -> UIImage?
     static func name(_ name: String) -> UIImage?
     /// Преобразует Base64-строку в изображение
     static func base64(base64: String) -> UIImage?
     /// Создает изображение размером {1,1} с указанным цветом
     ///
     /// - Parameter color: Цвет изображения
     /// - Returns: Изображение указанного цвета
     static func image(color: UIColor) -> UIImage
     /// Создает изображение размером {1,1} с указанным цветом
     ///
     /// - Parameter color: Цвет изображения
     /// - Returns: Изображение указанного цвета
     static func imageWithColor(_ color: UIColor) -> UIImage
     /// Создает изображение с указанным цветом и размером
     ///
     /// - Parameters:
     ///   - color: Цвет изображения
     ///   - size: Размер изображения
     /// - Returns: Изображение указанного цвета и размера
     static func image(color: UIColor, size: CGSize) -> UIImage?
     /// Создает скриншот окна
     ///
     /// - Parameters:
     ///   - fromView: Окно
     ///   - atFrame: Область скриншота
     /// - Returns: Скриншот
     static func getSnapshot(_ fromView: UIView?, atFrame: CGRect) -> UIImage?
     /// Изменяет цвет изображения
     func imageWithColor(_ color: UIColor) -> UIImage?
     /// Изменяет цвет изображения с использованием режима смешивания
     func imageWithTintColor(_ color: UIColor, blendMode: CGBlendMode) -> UIImage?
     /// Устанавливает закругленные углы для изображения
     func roundImage(byRoundingCorners: UIRectCorner = UIRectCorner.allCorners, cornerRadius: CGFloat) -> UIImage?
 /// Изменение изображения на закругленное
 func roundImage(byRoundingCorners: UIRectCorner = UIRectCorner.allCorners, cornerRadii: CGSize) -> UIImage?
     /// 
     /// - Возвращает: горизонтально отражённое `UIImage`
     func flipImage() -> UIImage
     
     /// Поворот на 90° вправо ⤼
     func rotateRight90() -> UIImage
     
     /// Установка ориентации изображения
     func orientation(_ orientation: UIImage.Orientation) -> UIImage
     
     /**
      *  Пропорциональное масштабирование
      */
     func scaleImage(scaleSize: CGFloat) -> UIImage?
     
     /**
      *  Переопределение размера изображения
      */
     func resizeImage(resize: CGSize) -> UIImage?
     
     /// Сжатие данных изображения без изменения размера
     /// 
     /// - Параметры:
     ///   - maxLength: максимальная длина
     /// - Возвращает:
     func compressImageOnLength(maxLength: Int) -> Data?
     
     /// Сжатие изображения
     /// 
     /// - Параметры:
     ///   - maxLength: максимальное количество байтов после сжатия
     /// - Возвращает: данные сжатого изображения
     func compressImageMid(maxLength: Int) -> Data?
     
     /// Сжатие изображения
     /// 
     /// - Параметры:
     ///   - maxLength: максимальное количество байтов после сжатия
     /// - Возвращает: сжатое изображение
     func compressImage(maxLength: Int) -> UIImage?
     
     /// Создание нового изображения по заданному размеру
     /// 
     /// - Параметры:
     ///   - size: заданный размер
     /// - Возвращает: новое изображение
     func imageWithNewSize(size: CGSize) -> UIImage?
     
     /// Наложение текста на изображение
     func add(text: String, attributed: [NSAttributedString.Key : Any], scale: CGFloat) -> UIImage  #### 7\. Дата <br>
     static func comps(type: Calendar.Component, date: Date = Date()) -> Int
     static func year(date: Date = Date()) -> Int
     static func month(date: Date = Date()) -> Int
     static func day(date: Date = Date()) -> Int
     static func hour(date: Date = Date()) -> Int
     static func minute(date: Date = Date()) -> Int
     static func second(date: Date = Date()) -> Int
     static func weekday(date: Date = Date()) -> Int
     /// Количество дней в месяце
    func monthTotalDays(calendar: Calendar = Calendar.current) -> Int
     /// Получение даты с смещением на указанное число дней
    func year(offset: Int, calendar: Calendar = Calendar.current) -> Date?
     /// Получение даты с смещением на указанное число месяцев
    func month(offset: Int, calendar: Calendar = Calendar.current) -> Date?
     /// Получает дату с учетом указанного смещения в месяцах. Например, offset = 1 указывает на дату через один месяц, offset = -1 — на дату за один месяц назад; день, час и так далее аналогично.
    func day(offset: Int, calendar: Calendar = Calendar.current) -> Date?
     /// Получает дату с учетом указанного смещения в днях.
    func dateString(with formatterStr: String, calendar: Calendar.Identifier? = nil) -> String
     /// Преобразует дату в строку с использованием указанного формата.
    static func date(with dateStr: String, formatter: String = "yyyy-MM-dd", calendar: Calendar.Identifier? = nil) -> Date?
     /// Преобразует строку в дату с использованием указанного формата.
    func equal(day: Date) -> Bool
     /// Проверяет равенство двух дат по году, месяцу и дню.
    var year: String
     /// Год.
    var month: String
     /// Месяц.
    var day: String
     /// День.
    var hour: String
     /// Час.
    var minute: String
     /// Минуты.
    var seconds: String
     /// Секунды.
    var weekDay: Int
     /// Номер дня недели.
    var isToday: Bool
     /// Является ли текущий день сегодняшним днём.#### 8. Базовые свойства `UIView` и методы для установки и получения значений, а также использование цепочки вызовов для удобства работы```swift
var x: CGFloat
/// Координата X.
var y: CGFloat
/// Координата Y.
var width: CGFloat
/// Ширина.
var height: CGFloat
/// Высота.
var maxX: CGFloat
/// Максимальная координата X.
var maxY: CGFloat
/// Максимальная координата Y.
var size: CGSize
/// Размер.
var origin: CGPoint
/// Начальная точка.
var centerX: CGFloat
/// Центральная координата X.
var centerY: CGFloat
/// Центральная координата Y.
var borderColor: UIColor
/// Цвет границы.
var borderWidth: CGFloat
/// Ширина границы.
var cornerRadius: CGFloat
/// Радиус закругления углов.
var masksToBounds: Bool
/// Установка маскировки границ.
@discardableResult
func border(width: CGFloat = 0.5, color: UIColor = .gray, radius: CGFloat? = nil) -> Self
/// Устанавливает ширину, цвет и радиус границы.
@discardableResult
func isUserInteractionEnabled(_ enable: Bool) -> Self
/// Включает/выключает возможность взаимодействия пользователя.
@discardableResult
func isHidden(_ enable: Bool) -> Self
/// Скрывает/показывает элемент.
func removeAllSubViews()
/// Удаляет все подэлементы.
func remove(subViews: [UIView]) -> Void
/// Удаляет выбранные подэлементы.
func findSubView<T: UIView>(_ classType: T.Type, recursion: Bool) -> T?
/// Находит подэлемент типа T.
@objc
func isHave(view: UIView) -> Bool
/// Проверяет наличие подэлемента.
@objc
private func isHave(view: UIView, in superView: UIView) -> Bool
/// Внутренний метод проверки наличия подэлемента.
@objc func addGradientLayer(from fColor: UIColor, to toColor: UIColor, start startPoint: CGPoint, end endPoint: CGPoint)
/// Добавляет градиентный слой с правого края налево
@objc func addGradientLayer(from fColor: UIColor, to toColor: UIColor)
/// 
@objc @discardableResult func addLine(frame: CGRect, color: UIColor) -> UIView
/// 
@objc @discardableResult func addLine(_ color: UIColor = DefaultborderColor, layout: ((view: UIView) -> ()) ) -> UIView
///

В этом примере были исправлены знаки препинания и пробелы перед ключевыми словами. Также были переведены комментарии. @discardableResult @objc func addLine(size: CGFloat, alignment: UIView.ContentMode, color: UIColor) -> UIView

  /// Частично закругленные углы
  ///
  /// - Parameters:
  ///   - corners: Углы, которые должны быть закруглены; можно передать несколько значений
  ///   - radii: Радиус закругления
  @discardableResult
  @objc func addRound(_ corners: UIRectCorner, radii: CGFloat) -> Self#### 9\. UIColor
  @objc static func hexColor(hexStr: String, alpha: CGFloat) -> UIColor
  /// HEX цвет
  @objc static func hexColor(hexStr: String) -> UIColor
  /// HEX цвет
  @objc static func hexStr(_ hexStr: String) -> UIColor
  /// Получение RGB значения цвета
  func getRGB() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat)
  /// Изменение прозрачности цвета
  @objc static func changeAlpha(color: UIColor, alpha: CGFloat) -> UIColor
  /// Изменение прозрачности цвета
  @objc func changeAlpha(_ alpha: CGFloat) -> UIColor

10. Dictionary

  mutating func append(dic: Dictionary) -> Void

11. UIControl Реализация нескольких событий нажатия с добавлением блока обратного вызова

  /// Добавление события
  @discardableResult
  func addBlock(for events: UIControlEvents, block: @escaping ((sender: Any) -> Void)) -> Self
  @discardableResult
  func addTarget(for controlEvents: UIControlEvents, target: Any?, action: Selector) -> Self
  /// Удаление события, связанного с блоком
  @discardableResult
  func removeBlockTarget(for events: UIControlEvents) -> Self
  /// Удаление всех событий нажатия
  @discardableResult
  func removeAllTargets() -> Self
  @discardableResult
  @objc dynamic func isEnabled(_ enabled: Bool) -> Self
  @discardableResult
  @objc dynamic func isSelected(_ selected: Bool) -> Self

12. NSObject Добавление прослушивания Observer

  func addObservers(keyPaths: [String], key: String = "", options: NSKeyValueObservingOptions = [.old, .new], block: @escaping ObserverBlockTargetAlias)

13. CALayer

  • Удаление всех подслоев
    func removeAllSublayers()
  • Размер слоя
    var size: CGSize
  • Центр слоя
    var center: CGPoint
    ```#### 14. Методы цепочечной записи UILabel
    
  • Высота строки
    
    

var lineHeight: CGFloat


* Установка высоты строки
  ```swift
@discardableResult
func lineHeight(_ value: CGFloat) -> Self
  • Установка шрифта
    
    

@discardableResult func font(_ font: UIFont) -> Self


* Установка атрибутированного текста
  ```swift
@discardableResult
func attributedText(_ value: NSAttributedString?) -> Self
  • Установка количества строк
    
    

@discardableResult func numberOfLines(_ value: Int) -> Self


* Установка режима переноса строки
  ```swift
@discardableResult
func lineBreakMode(_ value: NSLineBreakMode) -> Self
  • Установка цвета текста
    
    

@discardableResult func textColor(_ color: UIColor) -> Self


* Установка выравнивания текста
  ```swift
@discardableResult
func textAlignment(_ alignment: NSTextAlignment) -> Self
  • Установка текста
    
    

@discardableResult func text(_ text: String?) -> Self

* Регистрация ячейки
  ```swift
@discardableResult
func register<T>(cell cellClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self
  • Регистрация заголовка/футера
    
    

@discardableResult func register(headerFooter cellClass: T.Type, nibName: String? = nil, identifier: String = "(NSStringFromClass(T.self))_identifier") -> Self

* Получение стандартной ячейки
  ```swift
func defaultCell(_ style: UITableViewCell.CellStyle = .default, initBlock: ((_: UITableViewCell) -> Void)? = nil) -> UITableViewCell
  • Получение ячейки с указанием идентификатора
    
    

func cellT(identifier: String = "(NSStringFromClass(T.self))_identifier", cellClass: T.Type, for indexPath: IndexPath) -> T

* Получение ячейки с указанием идентификатора и стиля
  ```swift
func cellT<T : UITableViewCell>(identifier: String = "\(NSStringFromClass(T.self))_identifier", cellClass: T.Type, style: UITableViewCell.CellStyle = .default, initBlock: ((_: T) -> Void)? = nil) -> T
  • Получение заголовка/футера
    
    

func headerFooterView(identifier: String = "(NSStringFromClass(T.self))HeaderFooter_identifier", headerFooterClass: T.Type, initBlock: ((_: T) -> Void)? = nil) -> T


```#### 16. Реализация быстрой регистрации и получения элементов UICollectionView

```swift
@discardableResult
func register<T>(cell cellClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self 

@discardableResult
func register<T>(header headerClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self

@discardableResult
func register<T>(footer footerClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self
``````markdown
### Пользовательские компоненты
#### 1、ZZScrollView

![](https://gitee.com/czz_ Yöntemleri_8023/ZZToolKit/raw/master/Gif/ZZScrollView.gif)

`ZZScrollView` наследуется от `UIScrollView`, что позволяет связывать произвольные пользовательские компоненты в цепочку и обеспечивает плавное вертикальное прокручивание. Например, можно объединять такие компоненты как `UIView`, `UITableView`, `WKWebView`, `UIScrollView`, `UICollectionView` и так далее в любых сочетаниях. В реальных условиях это может применяться, например, для реализации страницы с новостью, где верхняя часть — это шапка новостной рубрики, средняя часть — это содержание новости в виде веб-страницы, а нижняя часть — это раздел с комментариями. Это позволяет быстро создать такую страницу без необходимости вычисления высоты прокрутки каждого компонента.

Способ использования:

``````swift
let customItem1 = ZZScrollView.Item(view: customView1, maxHeight: 268)
let customItem2 = ZZScrollView.Item(view: customView2)
let scrollItem1 = ZZScrollView.Item(view: scrollView1)
let scrollItem2 = ZZScrollView.Item(view: scrollView2)
let webItem1 = ZZScrollView.Item(view: webView1)
let webItem2 = ZZScrollView.Item(view: webView3)
let zzScrollView = ZZScrollView(items: [customItem1, scrollItem1, webItem1, webItem2, scrollItem2, customItem2])
    private(set) public var minHeight: CGFloat = 0
    private(set) public var maxHeight: CGFloat = 0 // Эффективно при условии, что view не является UIScrollView или её подклассами
    private(set) public var fixedWidth: CGFloat = 0 // Конфликтует с inset. При положительном значении inset.left и inset.right становятся недействительными
    private(set) public var view: UIView!
    @objc public dynamic var inset: UIEdgeInsets = .zero
    @objc private(set) public dynamic var contentSize: CGSize = .zero
    @objc private(set) public dynamic var isHidden: Bool = false
```#### 2\. ZZUIButton
![img](https://gitee.com/czz_8023/ZZToolKit/raw/master/Gif/ZZUIButton.gif)
ContentAlignment
![img](https://gitee.com/czz_8023/ZZToolKit/raw/master/Gif/ContentAlignment2.jpg)
![img](https://gitee.com/czz_8023/Yöntemler/Capture.png)
ImageAlignment
![img](https://gitee.com/czz_8023/ZZToolKit/raw/master/Gif/ImageAlignment1.jpg)
![img](https://gitee.com/czz_8023/ZZToolKit/raw/master/Gif/ImageAlignment2.jpg)

ZZUIButton позволяет свободно устанавливать позицию изображения и способ выравнивания содержимого. Можно произвольно выровнять изображение относительно содержимого.

Использование:

```swift
let button = ZZUIButton()
button.backgroundColor(color: .red, state: .normal)
            .backgroundColor(color: .blue, state: .highlighted)
            .backgroundColor(color: .orange, state: .selected)
            .backgroundColor(color: .yellow, state: .disabled)
            .title(title: "normal", state: .normal)
            .title(title: "highlighted", state: .highlighted)
            .title(title: "selected", state: .selected)
            .title(title: "disabled", state: .disabled)
            .image(image: UIImage(named: "icon_timeout"), state: .normal)
            .title(title: title, state: .normal)
            .contentAlignment(contentAlignment) // Выравнивание содержимого
            .imageAlignment(imageAlignment) // Выравнивание изображения относительно содержимого
            .space(20)
            .contentViewBgColor(color: .green, state: .normal)
            .contentInset(UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10))

3. ZZPageControl

img

Способ использования аналогичен системному UIPageControl. В нём добавлены способы выравнивания, более удобное установление изображений и получение номера страницы.```swift @IBInspectable open var numberOfPages: Int = 0

```swift
    @IBInspectable open var currentPage: Int = 0
    @IBInspectable open var pageImage: UIImage?
    @IBInspectable open var currentPageImage: UIImage?
    @IBInspectable open var alignment: PageControlAlignment = .Center
    @IBInspectable open var pageIndicatorTintColor: UIColor?
    @IBInspectable open var currentPageIndicatorTintColor: UIColor?
    @IBInspectable open var pageSpace: CGFloat = 6
```  Варианты выравнивания:<br>
      enum PageControlAlignment : Int {
            case Center, Left, Right
        }

  Пример использования:<br>
      let view = ZZPageControl()
              view.numberOfPages = 8
              view.currentPage = 0
              view.pageImage = pageImage
              view.currentPageImage = pageImage
              view.alignment = alignment
              view.pageIndicatorTintColor = pageIndicatorTintColor
              view.currentPageIndicatorTintColor = currentPageIndicatorTintColor
              view.pageSpace = 10
              view.indicatorSize = CGSize(width: 20, height: 15)

#### 4\. ZZBannerView<br>
![img](https://gitee.com/czz_8023/ZZToolKit/raw/master/Gif/ZZBannerView.gif)
Элемент для отображения баннера с возможностью циклической прокрутки и добавлением пользовательских View<br>
Пример использования:<br>
      let view = ZZBannerView()
              view.createBannerImagesBlock = { page, imageView, object in
                  imageView.backgroundColor = UIColor.lightGray
                  imageView.cornerRadius(10)
                  imageView.contentMode = .scaleAspectFill
              }
              view.isAutoRun = true
              view.isCycleRunBanner = true
              view.masksToBounds(true)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

ZZToolKit содержит различные часто используемые свойства, включая расширения для таких распространённых классов, как UIColor, UIImage, Array, UIControl, UILabel, UIView, Date и Dictionary. Также он включает компонент button, с помощью которого можно свободно настраивать положение изображения и содержание. В ZZToolkit есть компонент ZZBannerView... Развернуть Свернуть
MulanPSL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/czz_8023-ZZToolKit.git
git@api.gitlife.ru:oschina-mirror/czz_8023-ZZToolKit.git
oschina-mirror
czz_8023-ZZToolKit
czz_8023-ZZToolKit
master