Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 11b623fb13 | |||
| 4899802b01 | |||
| 0dfe1ca43b | |||
| 499d01c232 | |||
| f8f368ab8a | |||
| 023a57a763 | |||
| d426a0916e | |||
| 611c248c51 | |||
| 6f20c34d56 | |||
| be25b572f8 | |||
| 3c67812453 | |||
| 0431eb2a7d | |||
| fa0b95d923 | |||
| 523cd1c657 | |||
| 29e65c70d3 | |||
| 4b7360a011 | |||
| 2753c54216 | |||
| c7b3bc67be | |||
| 0c8bbf1fed | |||
| 2e99bc98bf | |||
| d5d52d1416 | |||
| 91c7735d0c | |||
| 18c5c1deb8 | |||
| 1ecfa31743 | |||
| 82b70ea1ee | |||
| d8ee06f1c5 | |||
| 13ce7426dd | |||
| 7d5039536c | |||
| b7a7731784 | |||
| 07f92d098a | |||
| f45405c9d5 | |||
| 768354ca35 | |||
| d5819763a1 | |||
| a73fc993aa | |||
| 0d027b5927 | |||
| bc482f58b3 | |||
| 78e941e01c | |||
| 7282008606 | |||
| 52d657faa0 | |||
| cba096becf | |||
| c095f49028 | |||
| 89e292c11b | |||
| 5089295771 | |||
| 39971af22d | |||
| 81d182259d | |||
| 1d82545a3d | |||
| 9086d7e874 | |||
| 666ebdf472 | |||
| 5a5d7b66e7 | |||
| 78f2bbe9f1 | |||
| c7133a6711 | |||
| aee5cdfd8f | |||
| 638c535767 | |||
| 782dd45b33 | |||
| 073baa6483 | |||
| a26dbf7c89 | |||
| 7ebde2b030 | |||
| 4009ed2b1e | |||
| a246c16cfe | |||
| ef8e4578d7 |
@@ -1,3 +1,12 @@
|
||||
---
|
||||
name: "\U0001F41B Bug report"
|
||||
about: Report a bug or unexpected behavior while using SkeletonView
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
### Description
|
||||
|
||||
Describe your issue here.
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
name: "\U0001F4E3 Feedback"
|
||||
about: Give us general feedback about the SkeletonView
|
||||
title: ''
|
||||
labels: feedback
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# SkeletonView Feedback
|
||||
|
||||
You can use this template to give us structured feedback or just wipe it and leave us a note. Thank you!
|
||||
|
||||
## What have you loved?
|
||||
|
||||
_eg "the nice colors"_
|
||||
|
||||
## What was confusing or gave you pause?
|
||||
|
||||
_eg "it did something unexpected"_
|
||||
|
||||
## Are there features you'd like to see added?
|
||||
|
||||
_eg "SkeletonView should be compatible with SwiftUI"_
|
||||
|
||||
## Anything else?
|
||||
|
||||
_eg "have a nice day"_
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: "⭐ Submit a request"
|
||||
about: Surface a feature or problem that you think should be solved
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
### Describe the feature or problem you’d like to solve
|
||||
|
||||
A clear and concise description of what the feature or problem is.
|
||||
|
||||
### Proposed solution
|
||||
|
||||
How will it benefit SkeletonView and its users?
|
||||
|
||||
### Additional context
|
||||
|
||||
Add any other context like screenshots or mockups are helpful, if applicable.
|
||||
@@ -0,0 +1,39 @@
|
||||
name-template: '📦 $RESOLVED_VERSION'
|
||||
tag-template: '$RESOLVED_VERSION'
|
||||
category-template: '#### $TITLE'
|
||||
change-template: '- **#$NUMBER**: $TITLE - @$AUTHOR'
|
||||
template: |
|
||||
$CHANGES
|
||||
categories:
|
||||
- title: '🚨 Breaking'
|
||||
label: 'breaking'
|
||||
- title: '🔬Improvements'
|
||||
label: '💡 enhancement'
|
||||
- title: '🙌 New'
|
||||
label: 'feature'
|
||||
- title: '🩹 Bug fixes'
|
||||
label: '🐞 bug'
|
||||
- title: '⚙️ Maintenance'
|
||||
label: '⚙️ maintenance'
|
||||
- title: '📚 Documentation'
|
||||
label: '📚 docs'
|
||||
- title: '💾 Dependency Updates'
|
||||
label: 'dependencies'
|
||||
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'breaking'
|
||||
- 'feature'
|
||||
minor:
|
||||
labels:
|
||||
- '💡 enhancement'
|
||||
patch:
|
||||
labels:
|
||||
- '🐞 bug'
|
||||
- '⚙️ maintenance'
|
||||
- '📚 docs'
|
||||
- 'dependencies'
|
||||
|
||||
exclude-labels:
|
||||
- 'skip-changelog'
|
||||
@@ -1,20 +0,0 @@
|
||||
name: build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: xcodebuild
|
||||
run: |
|
||||
xcodebuild -project SkeletonView.xcodeproj -target SkeletonView-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=12'
|
||||
xcodebuild -project SkeletonView.xcodeproj -target SkeletonView-tvOS -sdk appletvsimulator -destination 'platform=tvOS Simulator,name=Apple TV,OS=12'
|
||||
xcodebuild -project SkeletonView.xcodeproj -target SkeletonViewExample -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=12'
|
||||
@@ -1,15 +0,0 @@
|
||||
name: CI
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
danger:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Execute danger
|
||||
uses: danger/swift@3.5.0
|
||||
with:
|
||||
args: --failOnErrors --no-publish-check
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,19 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
build-config:
|
||||
- { target: 'SkeletonView-iOS', destination: 'platform=iOS Simulator,name=iPhone 8', sdk: 'iphonesimulator' }
|
||||
- { target: 'SkeletonView-tvOS', destination: 'platform=tvOS Simulator,name=Apple TV', sdk: 'appletvsimulator' }
|
||||
- { target: 'SkeletonViewExample', destination: 'platform=iOS Simulator,name=iPhone 8', sdk: 'iphonesimulator' }
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build
|
||||
run: xcodebuild clean -target '${{ matrix.build-config['target'] }}' -sdk '${{ matrix.build-config['sdk'] }}' -destination '${{ matrix.build-config['destination'] }}'
|
||||
@@ -0,0 +1,61 @@
|
||||
name: Release
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_version:
|
||||
description: "Version"
|
||||
required: true
|
||||
default: ""
|
||||
|
||||
jobs:
|
||||
pod_lib_lint:
|
||||
runs-on: macOS-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Validate Pod
|
||||
env:
|
||||
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
|
||||
run: pod lib lint SkeletonView.podspec --allow-warnings
|
||||
|
||||
bump_pod_version:
|
||||
runs-on: ubuntu-latest
|
||||
needs: pod_lib_lint
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: setup fastlane
|
||||
run: brew install fastlane
|
||||
- name: bump version
|
||||
run: fastlane bump_version next_version:${{ github.event.inputs.release_version }}
|
||||
|
||||
commit_changes:
|
||||
needs: bump_pod_version
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Commit changes
|
||||
uses: EndBug/add-and-commit@v7
|
||||
with:
|
||||
message: 'Bump version ${{ github.event.inputs.release_version }}'
|
||||
|
||||
create_release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: commit_changes
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
publish: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
pod_trunk_repo:
|
||||
runs-on: macOS-latest
|
||||
needs: create_release
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Publish Pod
|
||||
env:
|
||||
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
|
||||
run: pod trunk push SkeletonView.podspec
|
||||
@@ -0,0 +1,14 @@
|
||||
name: Release Notes
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
update_release_notes:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@master
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,17 +0,0 @@
|
||||
name: SwiftLint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ develop ]
|
||||
paths:
|
||||
- '.github/workflows/swiftlint-macos.yml'
|
||||
- '.swiftlint.yml'
|
||||
- '**/*.swift'
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Run SwiftLint
|
||||
run: swiftlint lint --reporter github-actions-logging
|
||||
@@ -0,0 +1,34 @@
|
||||
name: Validations
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches: [develop]
|
||||
types: [opened, reoneped, edited, synchronized]
|
||||
|
||||
# workflow_dispatch:
|
||||
# inputs:
|
||||
# commit hash:
|
||||
# description: "Commit hash"
|
||||
# required: true
|
||||
# default: ""
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run SwiftLint
|
||||
run: swiftlint lint --reporter github-actions-logging
|
||||
|
||||
danger:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Danger
|
||||
uses: docker://frmeloni/danger-swift-with-swiftlint:1.3.1
|
||||
with:
|
||||
args: --failOnErrors --verbose
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
+7
-2
@@ -5,9 +5,12 @@ All notable changes to this project will be documented in this file
|
||||
|
||||
#### 🙌 New
|
||||
|
||||
#### 🔬Improvements
|
||||
|
||||
#### 🔬 Improvements
|
||||
* [**369**](https://github.com/Juanpe/SkeletonView/pull/369): remove useless corner radius constraint - [@Juanpe](https://github.com/Juanpe)
|
||||
* [**357**](https://github.com/Juanpe/SkeletonView/pull/357): Removed duplicate code in SkeletonCollectionDelegate. - [@keshavamurthy1](https://github.com/keshavamurthy1)
|
||||
|
||||
#### 🩹 Bug fixes
|
||||
* [**359**](https://github.com/Juanpe/SkeletonView/pull/359): SkeletonView respecting Font's height, rather than the `UIView` actual height. - [@keshavamurthy1](https://github.com/keshavamurthy1)
|
||||
|
||||
|
||||
## 📦 [1.11.0](https://github.com/Juanpe/SkeletonView/releases/tag/1.11.0)
|
||||
@@ -15,6 +18,8 @@ All notable changes to this project will be documented in this file
|
||||
#### 🙌 New
|
||||
* [**339**](https://github.com/Juanpe/SkeletonView/pull/339): Add `hiddenWhenSkeletonIsActive` property - [@mohn93](https://github.com/mohn93)
|
||||
* [**341**](https://github.com/Juanpe/SkeletonView/pull/341): Support autoreverses in gradient animations - [@Juanpe](https://github.com/Juanpe)
|
||||
|
||||
#### 🔬Improvements
|
||||
* [**344**](https://github.com/Juanpe/SkeletonView/pull/344): Resize labels based on number of lines - [@Juanpe](https://github.com/Juanpe)
|
||||
|
||||
#### 🩹 Bug fixes
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||

|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/workflows/build">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/build/badge.svg">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/actions?query=workflow%3ACI">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/CI/badge.svg">
|
||||
</a>
|
||||
<a href="https://codebeat.co/projects/github-com-juanpe-skeletonview-master"><img alt="codebeat badge" src="https://codebeat.co/badges/f854fdfd-31e5-4689-ba04-075d83653e60" /></a>
|
||||
<img src="http://img.shields.io/badge/dependency%20manager-swiftpm%2Bcocoapods%2Bcarthage-green" />
|
||||
@@ -28,7 +28,7 @@ Today almost all apps have async processes, such as API requests, long running p
|
||||
Enjoy it! 🙂
|
||||
|
||||
|
||||
##
|
||||
##
|
||||
- [🌟 Features](#-features)
|
||||
- [🎬 Guides](#-guides)
|
||||
- [📲 Installation](#-installation)
|
||||
@@ -37,10 +37,14 @@ Enjoy it! 🙂
|
||||
- [🔠 Texts](#-texts)
|
||||
- [🦋 Appearance](#-appearance)
|
||||
- [🎨 Custom colors](#-custom-colors)
|
||||
- [ 🏃♀️ Animations](#%EF%B8%8F-animations)
|
||||
- [Image captured from website https://flatuicolors.com](#image-captured-from-website-httpsflatuicolorscom)
|
||||
- [🏃♀️ Animations](#️-animations)
|
||||
- [🏄 Transitions](#-transitions)
|
||||
- [✨ Miscellaneous](#-miscellaneous)
|
||||
- [❤️ Contributing](#️-contributing)
|
||||
- [📢 Mentions](#-mentions)
|
||||
- [👨🏻💻 Author](#-author)
|
||||
- [👮🏻 License](#-license)
|
||||
|
||||
|
||||
|
||||
|
||||
+6
-4
@@ -1,8 +1,8 @@
|
||||

|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/workflows/build">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/build/badge.svg">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/actions?query=workflow%3ACI">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/CI/badge.svg">
|
||||
</a>
|
||||
<a href="https://codebeat.co/projects/github-com-juanpe-skeletonview-master"><img alt="codebeat badge" src="https://codebeat.co/badges/f854fdfd-31e5-4689-ba04-075d83653e60" /></a>
|
||||
<img src="http://img.shields.io/badge/dependency%20manager-swiftpm%2Bcocoapods%2Bcarthage-green" />
|
||||
@@ -31,14 +31,16 @@ Enjoy it! 🙂
|
||||
- [🎬 Videotutoriales](#-videotutoriales)
|
||||
- [📲 Instalación](#-instalación)
|
||||
- [🐒 ¿Cómo funciona?](#-cómo-funciona)
|
||||
- [](#-1)
|
||||
- [🌿 Colecciones](#-colecciones)
|
||||
- [🔠 Textos](#-textos)
|
||||
- [🦋 Apariencia](#-apariencia)
|
||||
- [🎨 Colores](#-colors)
|
||||
- [🎨 Colores](#-colores)
|
||||
- [Imagen extraída de la web https://flatuicolors.com](#imagen-extraída-de-la-web-httpsflatuicolorscom)
|
||||
- [🏃♀️ Animaciones](#️-animaciones)
|
||||
- [🏄 Transiciones](#-transiciones)
|
||||
- [✨ Miscelánea](#-miscelánea)
|
||||
- [❤️ Contribuir](#️-contribuir)
|
||||
- [❤️ Contributing](#️-contributing)
|
||||
- [📢 Menciones](#-menciones)
|
||||
- [👨🏻💻 Autor](#-autor)
|
||||
- [👮🏻 Licencia](#-licencia)
|
||||
|
||||
+32
-24
@@ -1,8 +1,8 @@
|
||||

|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/workflows/build">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/build/badge.svg">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/actions?query=workflow%3ACI">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/CI/badge.svg">
|
||||
</a>
|
||||
<a href="https://codebeat.co/projects/github-com-juanpe-skeletonview-master"><img alt="codebeat badge" src="https://codebeat.co/badges/f854fdfd-31e5-4689-ba04-075d83653e60" /></a>
|
||||
<img src="https://img.shields.io/badge/Swift-5-orange.svg" />
|
||||
@@ -37,28 +37,36 @@ Aujourd'hui, presque toutes les applications ont des processus asynchrones, tels
|
||||
|
||||
Profitez-en! 🙂
|
||||
|
||||
* [Caractéristiques](#-caractéristiques)
|
||||
* [Guides](#-guides)
|
||||
* [Installation](#-installation)
|
||||
* [Cocoapods](#utilisation-de-cocoapods)
|
||||
* [Carthage](#utilisation-de-carthage)
|
||||
* [SPM](#utilisation-du-gestionnaire-de-paquets-Swift)
|
||||
* [Comment utiliser](#-mode-d'emploi)
|
||||
* [Collections](#-collections)
|
||||
* [Texte Multiligne](#-texte-multiligne)
|
||||
* [Couleurs personnalisées](#-couleurs-personnalisées)
|
||||
* [Présentation](#-présentation)
|
||||
* [Animations personnalisées](#-animations-personnalisées)
|
||||
* [Transitions](#-transitions)
|
||||
* [Hiérarchie](#-hiérarchie)
|
||||
* [Débugger](#-débugger)
|
||||
* [Documentation](#-documentation)
|
||||
* [Versions OS & SDK supportées](#-versions-os-et-sdk-supportées)
|
||||
* [Prochaines étapes](#-prochaines-étapes)
|
||||
* [Contribuer](#-contribuer)
|
||||
* [Mentions](#-mentions)
|
||||
* [Auteur](#-auteur)
|
||||
* [Licence](#-licence)
|
||||
- [🌟 Caractéristiques](#-caractéristiques)
|
||||
- [🎬 Guides](#-guides)
|
||||
- [📲 Installation](#-installation)
|
||||
- [Utilisation de CocoaPods](#utilisation-de-cocoapods)
|
||||
- [Utilisation de Carthage](#utilisation-de-carthage)
|
||||
- [Utilisation du gestionnaire de paquets Swift](#utilisation-du-gestionnaire-de-paquets-swift)
|
||||
- [🐒 Mode d'emploi](#-mode-demploi)
|
||||
- [Extra](#extra)
|
||||
- [Mise en page des vues squelettes](#mise-en-page-des-vues-squelettes)
|
||||
- [Mise à jour de la configuration du squelette](#mise-à-jour-de-la-configuration-du-squelette)
|
||||
- [🌿 Collections](#-collections)
|
||||
- [UITableView](#uitableview)
|
||||
- [UICollectionView](#uicollectionview)
|
||||
- [📰 Texte multiligne](#-texte-multiligne)
|
||||
- [🎛 Personnaliser](#-personnaliser)
|
||||
- [🎨 Couleurs personnalisées](#-couleurs-personnalisées)
|
||||
- [Image tirée du site web https://flatuicolors.com](#image-tirée-du-site-web-httpsflatuicolorscom)
|
||||
- [🦋 Présentation](#-présentation)
|
||||
- [🤓 Animations personnalisées](#-animations-personnalisées)
|
||||
- [🏄 Transitions](#-transitions)
|
||||
- [👨👧👦 Hiérarchie](#-hiérarchie)
|
||||
- [🔬 Débugger](#-débugger)
|
||||
- [📚 Documentation](#-documentation)
|
||||
- [📋 Versions OS et SDK supportées](#-versions-os-et-sdk-supportées)
|
||||
- [📬 Prochaines étapes](#-prochaines-étapes)
|
||||
- [❤️ Contribuer](#️-contribuer)
|
||||
- [Projet généré avec SwiftPlate](#projet-généré-avec-swiftplate)
|
||||
- [📢 Mentions](#-mentions)
|
||||
- [👨🏻💻 Auteur](#-auteur)
|
||||
- [👮🏻 Licence](#-licence)
|
||||
|
||||
## 🌟 Caractéristiques
|
||||
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||

|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/workflows/build">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/build/badge.svg">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/actions?query=workflow%3ACI">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/CI/badge.svg">
|
||||
</a>
|
||||
<a href="https://codebeat.co/projects/github-com-juanpe-skeletonview-master"><img alt="codebeat badge" src="https://codebeat.co/badges/f854fdfd-31e5-4689-ba04-075d83653e60" /></a>
|
||||
<img src="https://img.shields.io/badge/Swift-5-orange.svg" />
|
||||
|
||||
+26
-21
@@ -1,8 +1,8 @@
|
||||

|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/workflows/build">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/build/badge.svg">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/actions?query=workflow%3ACI">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/CI/badge.svg">
|
||||
</a>
|
||||
<a href="https://codebeat.co/projects/github-com-juanpe-skeletonview-master"><img alt="codebeat badge" src="https://codebeat.co/badges/f854fdfd-31e5-4689-ba04-075d83653e60" /></a>
|
||||
<img src="https://img.shields.io/badge/Swift-5-orange.svg" />
|
||||
@@ -36,25 +36,30 @@ Hoje, quase todos os apps têm processos assíncronos, como requisições de API
|
||||
|
||||
Aproveite! 🙂
|
||||
|
||||
* [Features](#-features)
|
||||
* [Requerimentos](#-supported-os--sdk-versions)
|
||||
* [Projeto de exemplo](#-example)
|
||||
* [Instalação](#-installation)
|
||||
* [Cocoapods](#using-cocoapods)
|
||||
* [Carthage](#using-carthage)
|
||||
* [Como usar](#-how-to-use)
|
||||
* [Coleções](#-collections)
|
||||
* [Texto em várias linhas](#-multiline-text)
|
||||
* [Cores customizadas](#-custom-colors)
|
||||
* [Aparência](#-appearance)
|
||||
* [Animaçōes customizadas](#-custom-animations)
|
||||
* [Hierarquia](#-hierarchy)
|
||||
* [Documentação](#-documentation)
|
||||
* [Próximos passos](#-next-steps)
|
||||
* [Contribuindo](#-contributing)
|
||||
* [Menções](#-mentions)
|
||||
* [Autor](#-author)
|
||||
* [Licença](#-license)
|
||||
- [🌟 Features](#-features)
|
||||
- [📋 Versões do SDK e OS suportados](#-versões-do-sdk-e-os-suportados)
|
||||
- [🔮 Exemplo](#-exemplo)
|
||||
- [📲 Instalação](#-instalação)
|
||||
- [Usando CocoaPods](#usando-cocoapods)
|
||||
- [Usando Carthage](#usando-carthage)
|
||||
- [🐒 Como usar](#-como-usar)
|
||||
- [🌿 Coleções](#-coleções)
|
||||
- [UITableView](#uitableview)
|
||||
- [UICollectionView](#uicollectionview)
|
||||
- [📰 Texto de várias linhas](#-texto-de-várias-linhas)
|
||||
- [🎛 Customização](#-customização)
|
||||
- [🎨 Cores customizadas](#-cores-customizadas)
|
||||
- [Imagem capturada do site https://flatuicolors.com](#imagem-capturada-do-site-httpsflatuicolorscom)
|
||||
- [🦋 Aparência](#-aparência)
|
||||
- [🤓 Animações customizadas](#-animações-customizadas)
|
||||
- [👨👧👦 Hierarquia](#-hierarquia)
|
||||
- [📚 Documentação](#-documentação)
|
||||
- [📬 Próximos passos](#-próximos-passos)
|
||||
- [❤️ Contribuindo](#️-contribuindo)
|
||||
- [Projeto gerado com SwiftPlate](#projeto-gerado-com-swiftplate)
|
||||
- [📢 Menções](#-menções)
|
||||
- [👨🏻💻 Autor](#-autor)
|
||||
- [👮🏻 Licença](#-licença)
|
||||
|
||||
|
||||
## 🌟 Features
|
||||
|
||||
+25
-20
@@ -1,8 +1,8 @@
|
||||

|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/workflows/build">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/build/badge.svg">
|
||||
<a href="https://github.com/Juanpe/SkeletonView/actions?query=workflow%3ACI">
|
||||
<img src="https://github.com/Juanpe/SkeletonView/workflows/CI/badge.svg">
|
||||
</a>
|
||||
<a href="https://codebeat.co/projects/github-com-juanpe-skeletonview-master"><img alt="codebeat badge" src="https://codebeat.co/badges/f854fdfd-31e5-4689-ba04-075d83653e60" /></a>
|
||||
<img src="https://img.shields.io/badge/Swift-5-orange.svg" />
|
||||
@@ -36,24 +36,29 @@
|
||||
|
||||
好好享受! 🙂
|
||||
|
||||
* [特征](#-特征)
|
||||
* [版本要求](#-版本要求)
|
||||
* [示例项目](#-示例)
|
||||
* [安装](#-安装)
|
||||
* [Cocoapods](#使用-cocoapods)
|
||||
* [Carthage](#使用-carthage)
|
||||
* [如何使用](#-如何使用)
|
||||
* [集合](#-集合)
|
||||
* [多行文字](#-多行文字)
|
||||
* [自定义颜色](#-自定义颜色)
|
||||
* [自定义动画](#-自定义动画)
|
||||
* [等级制度](#-等级制度)
|
||||
* [文档](#-文档)
|
||||
* [下一步](#-下一步)
|
||||
* [特约](#-特约)
|
||||
* [提及](#-提及)
|
||||
* [作者](#-作者)
|
||||
* [许可证](#-许可证)
|
||||
- [🌟 特征](#-特征)
|
||||
- [📋 版本要求](#-版本要求)
|
||||
- [🔮 示例](#-示例)
|
||||
- [📲 安装](#-安装)
|
||||
- [使用 CocoaPods](#使用-cocoapods)
|
||||
- [使用 Carthage](#使用-carthage)
|
||||
- [🐒 如何使用](#-如何使用)
|
||||
- [🌿 集合](#-集合)
|
||||
- [UITableView](#uitableview)
|
||||
- [UICollectionView](#uicollectionview)
|
||||
- [📰 多行文字](#-多行文字)
|
||||
- [🎛 定制](#-定制)
|
||||
- [🎨 自定义颜色](#-自定义颜色)
|
||||
- [从网站 https://flatuicolors.com捕获的图像](#从网站-httpsflatuicolorscom捕获的图像)
|
||||
- [🤓 自定义动画](#-自定义动画)
|
||||
- [👨👧👦 等级制度](#-等级制度)
|
||||
- [📚 文档](#-文档)
|
||||
- [📬 下一步](#-下一步)
|
||||
- [❤️ 特约](#️-特约)
|
||||
- [使用 SwiftPlate 生成的项目](#使用-swiftplate-生成的项目)
|
||||
- [📢 提及](#-提及)
|
||||
- [👨🏻💻 作者](#-作者)
|
||||
- [👮🏻 许可证](#-许可证)
|
||||
|
||||
|
||||
## 🌟 特征
|
||||
|
||||
@@ -28,11 +28,11 @@ class SkeletonCollectionDataSource: NSObject {
|
||||
// MARK: - UITableViewDataSource
|
||||
extension SkeletonCollectionDataSource: UITableViewDataSource {
|
||||
func numberOfSections(in tableView: UITableView) -> Int {
|
||||
return originalTableViewDataSource?.numSections(in: tableView) ?? 0
|
||||
originalTableViewDataSource?.numSections(in: tableView) ?? 0
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return originalTableViewDataSource?.collectionSkeletonView(tableView, numberOfRowsInSection: section) ?? 0
|
||||
originalTableViewDataSource?.collectionSkeletonView(tableView, numberOfRowsInSection: section) ?? 0
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
@@ -46,11 +46,11 @@ extension SkeletonCollectionDataSource: UITableViewDataSource {
|
||||
// MARK: - UICollectionViewDataSource
|
||||
extension SkeletonCollectionDataSource: UICollectionViewDataSource {
|
||||
func numberOfSections(in collectionView: UICollectionView) -> Int {
|
||||
return originalCollectionViewDataSource?.numSections(in: collectionView) ?? 0
|
||||
originalCollectionViewDataSource?.numSections(in: collectionView) ?? 0
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
return originalCollectionViewDataSource?.collectionSkeletonView(collectionView, numberOfItemsInSection: section) ?? 0
|
||||
originalCollectionViewDataSource?.collectionSkeletonView(collectionView, numberOfItemsInSection: section) ?? 0
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
|
||||
@@ -21,23 +21,11 @@ class SkeletonCollectionDelegate: NSObject {
|
||||
// MARK: - UITableViewDelegate
|
||||
extension SkeletonCollectionDelegate: UITableViewDelegate {
|
||||
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
|
||||
if let viewIdentifier = originalTableViewDelegate?.collectionSkeletonView(tableView, identifierForHeaderInSection: section),
|
||||
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: viewIdentifier) {
|
||||
skeletonViewIfContainerSkeletonIsActive(container: tableView, view: header)
|
||||
return header
|
||||
}
|
||||
|
||||
return nil
|
||||
headerOrFooterView(tableView, for: originalTableViewDelegate?.collectionSkeletonView(tableView, identifierForHeaderInSection: section))
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
|
||||
if let viewIdentifier = originalTableViewDelegate?.collectionSkeletonView(tableView, identifierForFooterInSection: section),
|
||||
let footer = tableView.dequeueReusableHeaderFooterView(withIdentifier: viewIdentifier) {
|
||||
skeletonViewIfContainerSkeletonIsActive(container: tableView, view: footer)
|
||||
return footer
|
||||
}
|
||||
|
||||
return nil
|
||||
headerOrFooterView(tableView, for: originalTableViewDelegate?.collectionSkeletonView(tableView, identifierForHeaderInSection: section))
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, didEndDisplayingHeaderView view: UIView, forSection section: Int) {
|
||||
@@ -54,6 +42,12 @@ extension SkeletonCollectionDelegate: UITableViewDelegate {
|
||||
cell.hideSkeleton()
|
||||
originalTableViewDelegate?.tableView?(tableView, didEndDisplaying: cell, forRowAt: indexPath)
|
||||
}
|
||||
|
||||
private func headerOrFooterView(_ tableView: UITableView, for viewIdentifier: String? ) -> UIView? {
|
||||
guard let viewIdentifier = viewIdentifier, let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: viewIdentifier) else { return nil }
|
||||
skeletonViewIfContainerSkeletonIsActive(container: tableView, view: header)
|
||||
return header
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - UICollectionViewDelegate
|
||||
|
||||
@@ -4,10 +4,10 @@ import Foundation
|
||||
|
||||
extension Int {
|
||||
var whitespace: String {
|
||||
return whitespaces
|
||||
whitespaces
|
||||
}
|
||||
|
||||
var whitespaces: String {
|
||||
return String(repeating: " ", count: self)
|
||||
String(repeating: " ", count: self)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,11 +31,11 @@ extension UIColor {
|
||||
}
|
||||
|
||||
public var lighter: UIColor {
|
||||
return adjust(by: 1.35)
|
||||
adjust(by: 1.35)
|
||||
}
|
||||
|
||||
public var darker: UIColor {
|
||||
return adjust(by: 0.94)
|
||||
adjust(by: 0.94)
|
||||
}
|
||||
|
||||
func adjust(by percent: CGFloat) -> UIColor {
|
||||
@@ -45,7 +45,7 @@ extension UIColor {
|
||||
}
|
||||
|
||||
func makeGradient() -> [UIColor] {
|
||||
return [self, self.complementaryColor, self]
|
||||
[self, self.complementaryColor, self]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ extension UIView {
|
||||
|
||||
extension UILabel {
|
||||
var desiredHeightBasedOnNumberOfLines: CGFloat {
|
||||
let lineHeight = multilineTextFont?.lineHeight ?? SkeletonAppearance.default.multilineHeight
|
||||
let lineHeight = constraintHeight ?? SkeletonAppearance.default.multilineHeight
|
||||
let spaceNeededForEachLine = lineHeight * CGFloat(numberOfLines)
|
||||
let spaceNeededForSpaces = skeletonLineSpacing * CGFloat(numberOfLines - 1)
|
||||
let padding = paddingInsets.top + paddingInsets.bottom
|
||||
|
||||
@@ -11,7 +11,7 @@ enum MultilineAssociatedKeys {
|
||||
}
|
||||
|
||||
protocol ContainsMultilineText {
|
||||
var multilineTextFont: UIFont? { get }
|
||||
var constraintHeight: CGFloat? { get }
|
||||
var numLines: Int { get }
|
||||
var lastLineFillingPercent: Int { get }
|
||||
var multilineCornerRadius: Int { get }
|
||||
|
||||
@@ -12,13 +12,13 @@ public extension UILabel {
|
||||
@IBInspectable
|
||||
var linesCornerRadius: Int {
|
||||
get { return multilineCornerRadius }
|
||||
set { multilineCornerRadius = min(newValue, 10) }
|
||||
set { multilineCornerRadius = newValue }
|
||||
}
|
||||
|
||||
@IBInspectable
|
||||
var skeletonLineSpacing: CGFloat {
|
||||
get { return multilineSpacing }
|
||||
set { multilineSpacing = min(newValue, 10) }
|
||||
set { multilineSpacing = newValue }
|
||||
}
|
||||
|
||||
var skeletonPaddingInsets: UIEdgeInsets {
|
||||
@@ -28,10 +28,10 @@ public extension UILabel {
|
||||
}
|
||||
|
||||
extension UILabel: ContainsMultilineText {
|
||||
var multilineTextFont: UIFont? {
|
||||
return font
|
||||
}
|
||||
|
||||
var constraintHeight: CGFloat? {
|
||||
backupHeightConstraints.first?.constant
|
||||
}
|
||||
|
||||
var numLines: Int {
|
||||
return numberOfLines
|
||||
}
|
||||
|
||||
@@ -12,13 +12,13 @@ public extension UITextView {
|
||||
@IBInspectable
|
||||
var linesCornerRadius: Int {
|
||||
get { return multilineCornerRadius }
|
||||
set { multilineCornerRadius = min(newValue, 10) }
|
||||
set { multilineCornerRadius = newValue }
|
||||
}
|
||||
|
||||
@IBInspectable
|
||||
var skeletonLineSpacing: CGFloat {
|
||||
get { return multilineSpacing }
|
||||
set { multilineSpacing = min(newValue, 10) }
|
||||
set { multilineSpacing = newValue }
|
||||
}
|
||||
|
||||
var skeletonPaddingInsets: UIEdgeInsets {
|
||||
@@ -28,8 +28,8 @@ public extension UITextView {
|
||||
}
|
||||
|
||||
extension UITextView: ContainsMultilineText {
|
||||
var multilineTextFont: UIFont? {
|
||||
font
|
||||
var constraintHeight: CGFloat? {
|
||||
heightConstraints.first?.constant
|
||||
}
|
||||
|
||||
var numLines: Int {
|
||||
|
||||
@@ -83,7 +83,7 @@ struct SkeletonLayer {
|
||||
/// If there is more than one line, or custom preferences have been set for a single line, draw custom layers
|
||||
func addTextLinesIfNeeded() {
|
||||
guard let textView = holderAsTextView else { return }
|
||||
let lineHeight = textView.multilineTextFont?.lineHeight ?? SkeletonAppearance.default.multilineHeight
|
||||
let lineHeight = textView.constraintHeight ?? SkeletonAppearance.default.multilineHeight
|
||||
let config = SkeletonMultilinesLayerConfig(lines: textView.numLines,
|
||||
lineHeight: lineHeight,
|
||||
type: type,
|
||||
@@ -98,7 +98,7 @@ struct SkeletonLayer {
|
||||
|
||||
func updateLinesIfNeeded() {
|
||||
guard let textView = holderAsTextView else { return }
|
||||
let lineHeight = textView.multilineTextFont?.lineHeight ?? SkeletonAppearance.default.multilineHeight
|
||||
let lineHeight = textView.constraintHeight ?? SkeletonAppearance.default.multilineHeight
|
||||
let config = SkeletonMultilinesLayerConfig(lines: textView.numLines,
|
||||
lineHeight: lineHeight,
|
||||
type: type,
|
||||
|
||||
@@ -4,46 +4,46 @@ import UIKit
|
||||
|
||||
extension UIView {
|
||||
@objc var subviewsSkeletonables: [UIView] {
|
||||
return subviewsToSkeleton.filter { $0.isSkeletonable }
|
||||
subviewsToSkeleton.filter { $0.isSkeletonable }
|
||||
}
|
||||
|
||||
@objc var subviewsToSkeleton: [UIView] {
|
||||
return subviews
|
||||
subviews
|
||||
}
|
||||
}
|
||||
|
||||
extension UITableView {
|
||||
override var subviewsToSkeleton: [UIView] {
|
||||
return visibleCells + visibleSectionHeaders + visibleSectionFooters
|
||||
visibleCells + visibleSectionHeaders + visibleSectionFooters
|
||||
}
|
||||
}
|
||||
|
||||
extension UITableViewCell {
|
||||
override var subviewsToSkeleton: [UIView] {
|
||||
return contentView.subviews
|
||||
contentView.subviews
|
||||
}
|
||||
}
|
||||
|
||||
extension UITableViewHeaderFooterView {
|
||||
override var subviewsToSkeleton: [UIView] {
|
||||
return contentView.subviews
|
||||
contentView.subviews
|
||||
}
|
||||
}
|
||||
|
||||
extension UICollectionView {
|
||||
override var subviewsToSkeleton: [UIView] {
|
||||
return subviews
|
||||
subviews
|
||||
}
|
||||
}
|
||||
|
||||
extension UICollectionViewCell {
|
||||
override var subviewsToSkeleton: [UIView] {
|
||||
return contentView.subviews
|
||||
contentView.subviews
|
||||
}
|
||||
}
|
||||
|
||||
extension UIStackView {
|
||||
override var subviewsToSkeleton: [UIView] {
|
||||
return arrangedSubviews
|
||||
arrangedSubviews
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
default_platform(:ios)
|
||||
podspec_name = "SkeletonView.podspec"
|
||||
|
||||
lane :bump_version do |options|
|
||||
version_bump_podspec(path: @podspec_name, version_number: options[:next_version])
|
||||
end
|
||||
|
||||
lane :release_current do
|
||||
version = version_get_podspec(path: @podspec_name)
|
||||
if git_tag_exists(tag: version)
|
||||
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
if [[ ! $1 =~ (0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-((0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*))?(\+([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*))? ]]; then
|
||||
echo "No valid version supplied"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_NUMBER=$1
|
||||
echo "Updating podspec version number to $VERSION_NUMBER"
|
||||
|
||||
|
||||
cd SkeletonView &>/dev/null
|
||||
cd .. &>/dev/null
|
||||
|
||||
sed -i '' -E "s/(s.version[[:space:]]+=[[:space:]]+').*(')/\1$VERSION_NUMBER\2/" SkeletonView.podspec
|
||||
Reference in New Issue
Block a user