├── .github └── workflows │ └── Build.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── Screenshots ├── 1.png ├── 2.png ├── 3.png ├── Customize.png ├── logo.png └── usage.gif ├── ZGRatingView.podspec ├── ZGRatingView.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── zyadgalal.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── ZGRatingView ├── Assets │ └── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ └── Contents.json │ │ ├── Contents.json │ │ └── baseline_star_black_18dp.imageset │ │ ├── Contents.json │ │ ├── baseline_star_black_18dp-1.png │ │ └── baseline_star_black_18dp.png ├── Classes │ ├── Extension │ │ ├── UIImageExtension.swift │ │ └── UIViewExtension.swift │ ├── ProgressBarColorStyle.swift │ ├── ZGRatingView.swift │ └── ZGRatingView.xib ├── Info.plist └── ZGRatingView.h ├── ZGRatingViewTests ├── Info.plist └── ZGRatingViewTests.swift └── example ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── zyadgalal.xcuserdatad │ │ └── xcschemes │ │ ├── Pods-example.xcscheme │ │ ├── ZGRatingView.xcscheme │ │ └── xcschememanagement.plist ├── Target Support Files │ ├── Pods-example │ │ ├── Pods-example-Info.plist │ │ ├── Pods-example-acknowledgements.markdown │ │ ├── Pods-example-acknowledgements.plist │ │ ├── Pods-example-dummy.m │ │ ├── Pods-example-frameworks-Debug-input-files.xcfilelist │ │ ├── Pods-example-frameworks-Debug-output-files.xcfilelist │ │ ├── Pods-example-frameworks-Release-input-files.xcfilelist │ │ ├── Pods-example-frameworks-Release-output-files.xcfilelist │ │ ├── Pods-example-frameworks.sh │ │ ├── Pods-example-umbrella.h │ │ ├── Pods-example.debug.xcconfig │ │ ├── Pods-example.modulemap │ │ └── Pods-example.release.xcconfig │ └── ZGRatingView │ │ ├── ZGRatingView-Info.plist │ │ ├── ZGRatingView-dummy.m │ │ ├── ZGRatingView-prefix.pch │ │ ├── ZGRatingView-umbrella.h │ │ ├── ZGRatingView.modulemap │ │ └── ZGRatingView.xcconfig └── ZGRatingView │ ├── LICENSE │ ├── README.md │ └── ZGRatingView │ ├── Assets │ └── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ └── Contents.json │ │ ├── Contents.json │ │ └── baseline_star_black_18dp.imageset │ │ ├── Contents.json │ │ ├── baseline_star_black_18dp-1.png │ │ └── baseline_star_black_18dp.png │ └── Classes │ ├── Extension │ ├── UIImageExtension.swift │ └── UIViewExtension.swift │ ├── ProgressBarColorStyle.swift │ ├── ZGRatingView.swift │ └── ZGRatingView.xib ├── example.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── zyadgalal.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── example.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist └── example ├── AppDelegate.swift ├── Assets.xcassets ├── AppIcon.appiconset │ └── Contents.json ├── Contents.json └── star_icon.imageset │ ├── Contents.json │ ├── star_icon.png │ ├── star_icon@2x.png │ └── star_icon@3x.png ├── Base.lproj ├── LaunchScreen.storyboard └── Main.storyboard ├── Info.plist ├── SceneDelegate.swift └── ViewController.swift /.github/workflows/Build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | test: 11 | name: Build 12 | runs-on: macos-latest 13 | 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@master 17 | 18 | - name: Build 19 | run: | 20 | cd example 21 | pod install 22 | xcodebuild clean build -workspace example.xcworkspace -scheme example -destination "platform=iOS Simulator,name=iPhone 11" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO 23 | 24 | - name: Lint 25 | run: | 26 | set -eo pipefail 27 | pod lib lint --allow-warnings 28 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [0.1.9] - 2020-04-11 4 | ### Added 5 | - Add some comments 6 | 7 | ## [0.1.7] - 2020-04-10 8 | ### Changed 9 | - Change some comments 10 | 11 | 12 | ## [0.1.6] - 2020-04-10 13 | ### Added 14 | - Add CHANGELOG file for the project. 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Zyad Galal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |
6 |
7 | 8 | 9 | ZGRatingView is a layout that adds a "Rating & Reviews" bar to your app, similar to the ones seen on Apple App Store . It provides a beautiful visual summary of the number of raters along with the ratings they gave on a specific item. 10 | 11 |
12 | 13 | - [Screenshots](#screenshots) 14 | - [Requirements](#requirements) 15 | - [Installation](#installation) 16 | - [Cocoapods](#cocoapods) 17 | - [Usage](#usage) 18 | - [Storyboard](#storyboard) 19 | - [Customize UI](#customizeui) 20 | - [Author](#author) 21 | - [Credits](#credits) 22 | - [License](#license) 23 | 24 | 25 | ## Screenshots 26 | 27 | | Style | Screenshot | 28 | |:-------------:|:-------------:| 29 | | Default bar color | | 30 | | Custom Solid bar color | | 31 | | Custom Gradient bar color | | 32 | 33 | ## Requirements 34 | 35 | * Xcode 10.2+ 36 | * Swift 5+ 37 | * iOS 10+ 38 | 39 | ## Installation 40 | 41 | ### CocoaPods 42 | 43 | [CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate SwiftyMenu into your Xcode project using CocoaPods, specify it in your `Podfile`: 44 | 45 | ```ruby 46 | pod 'ZGRatingView', '~> 0.1.9' 47 | ``` 48 | 49 | ## Usage 50 | ### Storyboard 51 | 52 | 53 | Then from your Storyboard you can connect your Outlet and set rating values 54 | ```swift 55 | 56 | ratingView.calculateStarsValues(totalRating: 5, 57 | fiveStars: 2, 58 | fourStars: 2, 59 | threeStars: 0, 60 | twoStars: 0, 61 | oneStar:1) 62 | ```` 63 | 64 | ### CustomizeUI 65 | You can customize **ZGRatingView** from Code as following : 66 | 67 | ```swift 68 | 69 | ratingView.setupRatingView(animationTime: 1.0, 70 | isProgressStyleGradient: false, 71 | progressTint: UIColor.Blue, 72 | startProgressTint: nil, 73 | endProgressTint: nil, 74 | starsImage: nil, 75 | barsSpacing: 2, 76 | barWidth: 3) 77 | ```` 78 | or from Storyboard as following : 79 | 80 | 81 | 82 | ## Author 83 | 84 | Zyad Galal, dev_zyad_galal@yahoo.com 85 | 86 | ## License 87 | 88 | ZGRatingView is available under the MIT license. See the `LICENSE` file for more info. 89 | 90 | ## Credits 91 | 92 | You can find me on Twitter [@ZyadMGalal](https://twitter.com/ZyadMGalal). 93 |
94 | You can find me on LinkedIn [@zyad-galal](https://www.linkedin.com/in/zyad-galal/). 95 | 96 | -------------------------------------------------------------------------------- /Screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/Screenshots/1.png -------------------------------------------------------------------------------- /Screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/Screenshots/2.png -------------------------------------------------------------------------------- /Screenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/Screenshots/3.png -------------------------------------------------------------------------------- /Screenshots/Customize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/Screenshots/Customize.png -------------------------------------------------------------------------------- /Screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/Screenshots/logo.png -------------------------------------------------------------------------------- /Screenshots/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/Screenshots/usage.gif -------------------------------------------------------------------------------- /ZGRatingView.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod spec lint RatingView.podspec' to ensure this is a 3 | # valid spec and to remove all comments including this before submitting the spec. 4 | # 5 | # To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html 6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ 7 | # 8 | 9 | Pod::Spec.new do |spec| 10 | 11 | spec.name = "ZGRatingView" 12 | spec.version = "0.1.9" 13 | spec.summary = "Simple star rating system bars, a view similar to the ones seen on App Store." 14 | 15 | # This description is used to generate tags and improve search results. 16 | # * Think: What does it do? Why did you write it? What is the focus? 17 | # * Try to keep it short, snappy and to the point. 18 | # * Write the description between the DESC delimiters below. 19 | # * Finally, don't worry about the indent, CocoaPods strips it! 20 | spec.description = <<-DESC 21 | ZGRatingView is a layout that adds a "Rating & Reviews" bar to your app, similar to the ones seen on Apple App Store . It provides a beautiful visual summary of the number of raters along with the ratings they gave on a specific item. 22 | DESC 23 | 24 | spec.homepage = "https://github.com/ZyadGalal/ZGRatingView" 25 | # spec.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" 26 | 27 | spec.license = { :type => "MIT", :file => "LICENSE" } 28 | spec.author = { "Zyad_Galal" => "zyad_mg@yahoo.com" } 29 | spec.social_media_url = "https://twitter.com/ZyadMGalal" 30 | spec.source = { :git => "https://github.com/ZyadGalal/ZGRatingView.git", :tag => spec.version.to_s } 31 | spec.ios.deployment_target = '10.0' 32 | spec.swift_version = '5.0' 33 | 34 | spec.source_files = 'ZGRatingView/Classes/**/*' 35 | spec.resources = 'ZGRatingView/Assets/*' 36 | 37 | 38 | end 39 | -------------------------------------------------------------------------------- /ZGRatingView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 32C4F55524409D00000B6107 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 32C4F55424409D00000B6107 /* CHANGELOG.md */; }; 11 | 32CF5844243F5C7D00CA58E1 /* ZGRatingView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32CF583A243F5C7D00CA58E1 /* ZGRatingView.framework */; }; 12 | 32CF5849243F5C7D00CA58E1 /* ZGRatingViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32CF5848243F5C7D00CA58E1 /* ZGRatingViewTests.swift */; }; 13 | 32CF584B243F5C7D00CA58E1 /* ZGRatingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 32CF583D243F5C7D00CA58E1 /* ZGRatingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 32CF587D243F5E7800CA58E1 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 32CF587B243F5E7800CA58E1 /* LICENSE */; }; 15 | 32CF587E243F5E7800CA58E1 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 32CF587C243F5E7800CA58E1 /* README.md */; }; 16 | 32CF5881243F5EDA00CA58E1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32CF5880243F5EDA00CA58E1 /* Assets.xcassets */; }; 17 | 32CF5885243F5EF200CA58E1 /* UIViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32CF5883243F5EF200CA58E1 /* UIViewExtension.swift */; }; 18 | 32CF5886243F5EF200CA58E1 /* UIImageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32CF5884243F5EF200CA58E1 /* UIImageExtension.swift */; }; 19 | 32CF588A243F5F0900CA58E1 /* ZGRatingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 32CF5887243F5F0900CA58E1 /* ZGRatingView.xib */; }; 20 | 32CF588B243F5F0900CA58E1 /* ZGRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32CF5888243F5F0900CA58E1 /* ZGRatingView.swift */; }; 21 | 32CF588C243F5F0900CA58E1 /* ProgressBarColorStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32CF5889243F5F0900CA58E1 /* ProgressBarColorStyle.swift */; }; 22 | 32CF588E243F5F7200CA58E1 /* ZGRatingView.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 32CF588D243F5F7200CA58E1 /* ZGRatingView.podspec */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | 32CF5845243F5C7D00CA58E1 /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = 32CF5831243F5C7D00CA58E1 /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = 32CF5839243F5C7D00CA58E1; 31 | remoteInfo = ZGRatingView; 32 | }; 33 | 32CF586E243F5CB100CA58E1 /* PBXContainerItemProxy */ = { 34 | isa = PBXContainerItemProxy; 35 | containerPortal = 32CF5831243F5C7D00CA58E1 /* Project object */; 36 | proxyType = 1; 37 | remoteGlobalIDString = 32CF5857243F5CB000CA58E1; 38 | remoteInfo = ZGRatingViewExample; 39 | }; 40 | /* End PBXContainerItemProxy section */ 41 | 42 | /* Begin PBXFileReference section */ 43 | 32C4F55424409D00000B6107 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = SOURCE_ROOT; }; 44 | 32CF583A243F5C7D00CA58E1 /* ZGRatingView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZGRatingView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 32CF583D243F5C7D00CA58E1 /* ZGRatingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZGRatingView.h; sourceTree = ""; }; 46 | 32CF583E243F5C7D00CA58E1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 47 | 32CF5843243F5C7D00CA58E1 /* ZGRatingViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZGRatingViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 32CF5848243F5C7D00CA58E1 /* ZGRatingViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZGRatingViewTests.swift; sourceTree = ""; }; 49 | 32CF584A243F5C7D00CA58E1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50 | 32CF5858243F5CB000CA58E1 /* ZGRatingViewExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZGRatingViewExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 32CF586D243F5CB100CA58E1 /* ZGRatingViewExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZGRatingViewExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | 32CF587B243F5E7800CA58E1 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = SOURCE_ROOT; }; 53 | 32CF587C243F5E7800CA58E1 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; }; 54 | 32CF5880243F5EDA00CA58E1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = ZGRatingView/Assets/Assets.xcassets; sourceTree = SOURCE_ROOT; }; 55 | 32CF5883243F5EF200CA58E1 /* UIViewExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UIViewExtension.swift; path = ZGRatingView/Classes/Extension/UIViewExtension.swift; sourceTree = SOURCE_ROOT; }; 56 | 32CF5884243F5EF200CA58E1 /* UIImageExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UIImageExtension.swift; path = ZGRatingView/Classes/Extension/UIImageExtension.swift; sourceTree = SOURCE_ROOT; }; 57 | 32CF5887243F5F0900CA58E1 /* ZGRatingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ZGRatingView.xib; path = Classes/ZGRatingView.xib; sourceTree = ""; }; 58 | 32CF5888243F5F0900CA58E1 /* ZGRatingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ZGRatingView.swift; path = Classes/ZGRatingView.swift; sourceTree = ""; }; 59 | 32CF5889243F5F0900CA58E1 /* ProgressBarColorStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProgressBarColorStyle.swift; path = Classes/ProgressBarColorStyle.swift; sourceTree = ""; }; 60 | 32CF588D243F5F7200CA58E1 /* ZGRatingView.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = ZGRatingView.podspec; sourceTree = SOURCE_ROOT; }; 61 | /* End PBXFileReference section */ 62 | 63 | /* Begin PBXFrameworksBuildPhase section */ 64 | 32CF5837243F5C7D00CA58E1 /* Frameworks */ = { 65 | isa = PBXFrameworksBuildPhase; 66 | buildActionMask = 2147483647; 67 | files = ( 68 | ); 69 | runOnlyForDeploymentPostprocessing = 0; 70 | }; 71 | 32CF5840243F5C7D00CA58E1 /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | 32CF5844243F5C7D00CA58E1 /* ZGRatingView.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | 32CF5855243F5CB000CA58E1 /* Frameworks */ = { 80 | isa = PBXFrameworksBuildPhase; 81 | buildActionMask = 2147483647; 82 | files = ( 83 | ); 84 | runOnlyForDeploymentPostprocessing = 0; 85 | }; 86 | 32CF586A243F5CB100CA58E1 /* Frameworks */ = { 87 | isa = PBXFrameworksBuildPhase; 88 | buildActionMask = 2147483647; 89 | files = ( 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | /* End PBXFrameworksBuildPhase section */ 94 | 95 | /* Begin PBXGroup section */ 96 | 32CF5830243F5C7D00CA58E1 = { 97 | isa = PBXGroup; 98 | children = ( 99 | 32CF587A243F5D1900CA58E1 /* podspec Metadata */, 100 | 32CF583C243F5C7D00CA58E1 /* ZGRatingView */, 101 | 32CF5847243F5C7D00CA58E1 /* ZGRatingViewTests */, 102 | 32CF583B243F5C7D00CA58E1 /* Products */, 103 | ); 104 | sourceTree = ""; 105 | }; 106 | 32CF583B243F5C7D00CA58E1 /* Products */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 32CF583A243F5C7D00CA58E1 /* ZGRatingView.framework */, 110 | 32CF5843243F5C7D00CA58E1 /* ZGRatingViewTests.xctest */, 111 | 32CF5858243F5CB000CA58E1 /* ZGRatingViewExample.app */, 112 | 32CF586D243F5CB100CA58E1 /* ZGRatingViewExampleTests.xctest */, 113 | ); 114 | name = Products; 115 | sourceTree = ""; 116 | }; 117 | 32CF583C243F5C7D00CA58E1 /* ZGRatingView */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 32CF5889243F5F0900CA58E1 /* ProgressBarColorStyle.swift */, 121 | 32CF5888243F5F0900CA58E1 /* ZGRatingView.swift */, 122 | 32CF5887243F5F0900CA58E1 /* ZGRatingView.xib */, 123 | 32CF5882243F5EDE00CA58E1 /* Extension */, 124 | 32CF587F243F5EC200CA58E1 /* Resources */, 125 | 32CF583D243F5C7D00CA58E1 /* ZGRatingView.h */, 126 | 32CF583E243F5C7D00CA58E1 /* Info.plist */, 127 | ); 128 | path = ZGRatingView; 129 | sourceTree = ""; 130 | }; 131 | 32CF5847243F5C7D00CA58E1 /* ZGRatingViewTests */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 32CF5848243F5C7D00CA58E1 /* ZGRatingViewTests.swift */, 135 | 32CF584A243F5C7D00CA58E1 /* Info.plist */, 136 | ); 137 | path = ZGRatingViewTests; 138 | sourceTree = ""; 139 | }; 140 | 32CF587A243F5D1900CA58E1 /* podspec Metadata */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 32C4F55424409D00000B6107 /* CHANGELOG.md */, 144 | 32CF588D243F5F7200CA58E1 /* ZGRatingView.podspec */, 145 | 32CF587B243F5E7800CA58E1 /* LICENSE */, 146 | 32CF587C243F5E7800CA58E1 /* README.md */, 147 | ); 148 | path = "podspec Metadata"; 149 | sourceTree = ""; 150 | }; 151 | 32CF587F243F5EC200CA58E1 /* Resources */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | 32CF5880243F5EDA00CA58E1 /* Assets.xcassets */, 155 | ); 156 | path = Resources; 157 | sourceTree = ""; 158 | }; 159 | 32CF5882243F5EDE00CA58E1 /* Extension */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 32CF5884243F5EF200CA58E1 /* UIImageExtension.swift */, 163 | 32CF5883243F5EF200CA58E1 /* UIViewExtension.swift */, 164 | ); 165 | path = Extension; 166 | sourceTree = ""; 167 | }; 168 | /* End PBXGroup section */ 169 | 170 | /* Begin PBXHeadersBuildPhase section */ 171 | 32CF5835243F5C7D00CA58E1 /* Headers */ = { 172 | isa = PBXHeadersBuildPhase; 173 | buildActionMask = 2147483647; 174 | files = ( 175 | 32CF584B243F5C7D00CA58E1 /* ZGRatingView.h in Headers */, 176 | ); 177 | runOnlyForDeploymentPostprocessing = 0; 178 | }; 179 | /* End PBXHeadersBuildPhase section */ 180 | 181 | /* Begin PBXNativeTarget section */ 182 | 32CF5839243F5C7D00CA58E1 /* ZGRatingView */ = { 183 | isa = PBXNativeTarget; 184 | buildConfigurationList = 32CF584E243F5C7D00CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingView" */; 185 | buildPhases = ( 186 | 32CF5835243F5C7D00CA58E1 /* Headers */, 187 | 32CF5836243F5C7D00CA58E1 /* Sources */, 188 | 32CF5837243F5C7D00CA58E1 /* Frameworks */, 189 | 32CF5838243F5C7D00CA58E1 /* Resources */, 190 | ); 191 | buildRules = ( 192 | ); 193 | dependencies = ( 194 | ); 195 | name = ZGRatingView; 196 | productName = ZGRatingView; 197 | productReference = 32CF583A243F5C7D00CA58E1 /* ZGRatingView.framework */; 198 | productType = "com.apple.product-type.framework"; 199 | }; 200 | 32CF5842243F5C7D00CA58E1 /* ZGRatingViewTests */ = { 201 | isa = PBXNativeTarget; 202 | buildConfigurationList = 32CF5851243F5C7D00CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingViewTests" */; 203 | buildPhases = ( 204 | 32CF583F243F5C7D00CA58E1 /* Sources */, 205 | 32CF5840243F5C7D00CA58E1 /* Frameworks */, 206 | 32CF5841243F5C7D00CA58E1 /* Resources */, 207 | ); 208 | buildRules = ( 209 | ); 210 | dependencies = ( 211 | 32CF5846243F5C7D00CA58E1 /* PBXTargetDependency */, 212 | ); 213 | name = ZGRatingViewTests; 214 | productName = ZGRatingViewTests; 215 | productReference = 32CF5843243F5C7D00CA58E1 /* ZGRatingViewTests.xctest */; 216 | productType = "com.apple.product-type.bundle.unit-test"; 217 | }; 218 | 32CF5857243F5CB000CA58E1 /* ZGRatingViewExample */ = { 219 | isa = PBXNativeTarget; 220 | buildConfigurationList = 32CF5874243F5CB100CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingViewExample" */; 221 | buildPhases = ( 222 | 32CF5854243F5CB000CA58E1 /* Sources */, 223 | 32CF5855243F5CB000CA58E1 /* Frameworks */, 224 | 32CF5856243F5CB000CA58E1 /* Resources */, 225 | ); 226 | buildRules = ( 227 | ); 228 | dependencies = ( 229 | ); 230 | name = ZGRatingViewExample; 231 | productName = ZGRatingViewExample; 232 | productReference = 32CF5858243F5CB000CA58E1 /* ZGRatingViewExample.app */; 233 | productType = "com.apple.product-type.application"; 234 | }; 235 | 32CF586C243F5CB100CA58E1 /* ZGRatingViewExampleTests */ = { 236 | isa = PBXNativeTarget; 237 | buildConfigurationList = 32CF5877243F5CB100CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingViewExampleTests" */; 238 | buildPhases = ( 239 | 32CF5869243F5CB100CA58E1 /* Sources */, 240 | 32CF586A243F5CB100CA58E1 /* Frameworks */, 241 | 32CF586B243F5CB100CA58E1 /* Resources */, 242 | ); 243 | buildRules = ( 244 | ); 245 | dependencies = ( 246 | 32CF586F243F5CB100CA58E1 /* PBXTargetDependency */, 247 | ); 248 | name = ZGRatingViewExampleTests; 249 | productName = ZGRatingViewExampleTests; 250 | productReference = 32CF586D243F5CB100CA58E1 /* ZGRatingViewExampleTests.xctest */; 251 | productType = "com.apple.product-type.bundle.unit-test"; 252 | }; 253 | /* End PBXNativeTarget section */ 254 | 255 | /* Begin PBXProject section */ 256 | 32CF5831243F5C7D00CA58E1 /* Project object */ = { 257 | isa = PBXProject; 258 | attributes = { 259 | LastSwiftUpdateCheck = 1140; 260 | LastUpgradeCheck = 1140; 261 | ORGANIZATIONNAME = "Zyad Galal"; 262 | TargetAttributes = { 263 | 32CF5839243F5C7D00CA58E1 = { 264 | CreatedOnToolsVersion = 11.4; 265 | LastSwiftMigration = 1140; 266 | }; 267 | 32CF5842243F5C7D00CA58E1 = { 268 | CreatedOnToolsVersion = 11.4; 269 | }; 270 | 32CF5857243F5CB000CA58E1 = { 271 | CreatedOnToolsVersion = 11.4; 272 | }; 273 | 32CF586C243F5CB100CA58E1 = { 274 | CreatedOnToolsVersion = 11.4; 275 | TestTargetID = 32CF5857243F5CB000CA58E1; 276 | }; 277 | }; 278 | }; 279 | buildConfigurationList = 32CF5834243F5C7D00CA58E1 /* Build configuration list for PBXProject "ZGRatingView" */; 280 | compatibilityVersion = "Xcode 9.3"; 281 | developmentRegion = en; 282 | hasScannedForEncodings = 0; 283 | knownRegions = ( 284 | en, 285 | Base, 286 | ); 287 | mainGroup = 32CF5830243F5C7D00CA58E1; 288 | productRefGroup = 32CF583B243F5C7D00CA58E1 /* Products */; 289 | projectDirPath = ""; 290 | projectRoot = ""; 291 | targets = ( 292 | 32CF5839243F5C7D00CA58E1 /* ZGRatingView */, 293 | 32CF5842243F5C7D00CA58E1 /* ZGRatingViewTests */, 294 | 32CF5857243F5CB000CA58E1 /* ZGRatingViewExample */, 295 | 32CF586C243F5CB100CA58E1 /* ZGRatingViewExampleTests */, 296 | ); 297 | }; 298 | /* End PBXProject section */ 299 | 300 | /* Begin PBXResourcesBuildPhase section */ 301 | 32CF5838243F5C7D00CA58E1 /* Resources */ = { 302 | isa = PBXResourcesBuildPhase; 303 | buildActionMask = 2147483647; 304 | files = ( 305 | 32CF587E243F5E7800CA58E1 /* README.md in Resources */, 306 | 32CF588E243F5F7200CA58E1 /* ZGRatingView.podspec in Resources */, 307 | 32CF5881243F5EDA00CA58E1 /* Assets.xcassets in Resources */, 308 | 32CF588A243F5F0900CA58E1 /* ZGRatingView.xib in Resources */, 309 | 32CF587D243F5E7800CA58E1 /* LICENSE in Resources */, 310 | 32C4F55524409D00000B6107 /* CHANGELOG.md in Resources */, 311 | ); 312 | runOnlyForDeploymentPostprocessing = 0; 313 | }; 314 | 32CF5841243F5C7D00CA58E1 /* Resources */ = { 315 | isa = PBXResourcesBuildPhase; 316 | buildActionMask = 2147483647; 317 | files = ( 318 | ); 319 | runOnlyForDeploymentPostprocessing = 0; 320 | }; 321 | 32CF5856243F5CB000CA58E1 /* Resources */ = { 322 | isa = PBXResourcesBuildPhase; 323 | buildActionMask = 2147483647; 324 | files = ( 325 | ); 326 | runOnlyForDeploymentPostprocessing = 0; 327 | }; 328 | 32CF586B243F5CB100CA58E1 /* Resources */ = { 329 | isa = PBXResourcesBuildPhase; 330 | buildActionMask = 2147483647; 331 | files = ( 332 | ); 333 | runOnlyForDeploymentPostprocessing = 0; 334 | }; 335 | /* End PBXResourcesBuildPhase section */ 336 | 337 | /* Begin PBXSourcesBuildPhase section */ 338 | 32CF5836243F5C7D00CA58E1 /* Sources */ = { 339 | isa = PBXSourcesBuildPhase; 340 | buildActionMask = 2147483647; 341 | files = ( 342 | 32CF588C243F5F0900CA58E1 /* ProgressBarColorStyle.swift in Sources */, 343 | 32CF5885243F5EF200CA58E1 /* UIViewExtension.swift in Sources */, 344 | 32CF5886243F5EF200CA58E1 /* UIImageExtension.swift in Sources */, 345 | 32CF588B243F5F0900CA58E1 /* ZGRatingView.swift in Sources */, 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | }; 349 | 32CF583F243F5C7D00CA58E1 /* Sources */ = { 350 | isa = PBXSourcesBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | 32CF5849243F5C7D00CA58E1 /* ZGRatingViewTests.swift in Sources */, 354 | ); 355 | runOnlyForDeploymentPostprocessing = 0; 356 | }; 357 | 32CF5854243F5CB000CA58E1 /* Sources */ = { 358 | isa = PBXSourcesBuildPhase; 359 | buildActionMask = 2147483647; 360 | files = ( 361 | ); 362 | runOnlyForDeploymentPostprocessing = 0; 363 | }; 364 | 32CF5869243F5CB100CA58E1 /* Sources */ = { 365 | isa = PBXSourcesBuildPhase; 366 | buildActionMask = 2147483647; 367 | files = ( 368 | ); 369 | runOnlyForDeploymentPostprocessing = 0; 370 | }; 371 | /* End PBXSourcesBuildPhase section */ 372 | 373 | /* Begin PBXTargetDependency section */ 374 | 32CF5846243F5C7D00CA58E1 /* PBXTargetDependency */ = { 375 | isa = PBXTargetDependency; 376 | target = 32CF5839243F5C7D00CA58E1 /* ZGRatingView */; 377 | targetProxy = 32CF5845243F5C7D00CA58E1 /* PBXContainerItemProxy */; 378 | }; 379 | 32CF586F243F5CB100CA58E1 /* PBXTargetDependency */ = { 380 | isa = PBXTargetDependency; 381 | target = 32CF5857243F5CB000CA58E1 /* ZGRatingViewExample */; 382 | targetProxy = 32CF586E243F5CB100CA58E1 /* PBXContainerItemProxy */; 383 | }; 384 | /* End PBXTargetDependency section */ 385 | 386 | /* Begin XCBuildConfiguration section */ 387 | 32CF584C243F5C7D00CA58E1 /* Debug */ = { 388 | isa = XCBuildConfiguration; 389 | buildSettings = { 390 | ALWAYS_SEARCH_USER_PATHS = NO; 391 | CLANG_ANALYZER_NONNULL = YES; 392 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 393 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 394 | CLANG_CXX_LIBRARY = "libc++"; 395 | CLANG_ENABLE_MODULES = YES; 396 | CLANG_ENABLE_OBJC_ARC = YES; 397 | CLANG_ENABLE_OBJC_WEAK = YES; 398 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 399 | CLANG_WARN_BOOL_CONVERSION = YES; 400 | CLANG_WARN_COMMA = YES; 401 | CLANG_WARN_CONSTANT_CONVERSION = YES; 402 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 403 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 404 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 405 | CLANG_WARN_EMPTY_BODY = YES; 406 | CLANG_WARN_ENUM_CONVERSION = YES; 407 | CLANG_WARN_INFINITE_RECURSION = YES; 408 | CLANG_WARN_INT_CONVERSION = YES; 409 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 410 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 411 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 412 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 413 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 414 | CLANG_WARN_STRICT_PROTOTYPES = YES; 415 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 416 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 417 | CLANG_WARN_UNREACHABLE_CODE = YES; 418 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 419 | COPY_PHASE_STRIP = NO; 420 | CURRENT_PROJECT_VERSION = 1; 421 | DEBUG_INFORMATION_FORMAT = dwarf; 422 | ENABLE_STRICT_OBJC_MSGSEND = YES; 423 | ENABLE_TESTABILITY = YES; 424 | GCC_C_LANGUAGE_STANDARD = gnu11; 425 | GCC_DYNAMIC_NO_PIC = NO; 426 | GCC_NO_COMMON_BLOCKS = YES; 427 | GCC_OPTIMIZATION_LEVEL = 0; 428 | GCC_PREPROCESSOR_DEFINITIONS = ( 429 | "DEBUG=1", 430 | "$(inherited)", 431 | ); 432 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 433 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 434 | GCC_WARN_UNDECLARED_SELECTOR = YES; 435 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 436 | GCC_WARN_UNUSED_FUNCTION = YES; 437 | GCC_WARN_UNUSED_VARIABLE = YES; 438 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 439 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 440 | MTL_FAST_MATH = YES; 441 | ONLY_ACTIVE_ARCH = YES; 442 | SDKROOT = iphoneos; 443 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 444 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 445 | VERSIONING_SYSTEM = "apple-generic"; 446 | VERSION_INFO_PREFIX = ""; 447 | }; 448 | name = Debug; 449 | }; 450 | 32CF584D243F5C7D00CA58E1 /* Release */ = { 451 | isa = XCBuildConfiguration; 452 | buildSettings = { 453 | ALWAYS_SEARCH_USER_PATHS = NO; 454 | CLANG_ANALYZER_NONNULL = YES; 455 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 456 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 457 | CLANG_CXX_LIBRARY = "libc++"; 458 | CLANG_ENABLE_MODULES = YES; 459 | CLANG_ENABLE_OBJC_ARC = YES; 460 | CLANG_ENABLE_OBJC_WEAK = YES; 461 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 462 | CLANG_WARN_BOOL_CONVERSION = YES; 463 | CLANG_WARN_COMMA = YES; 464 | CLANG_WARN_CONSTANT_CONVERSION = YES; 465 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 466 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 467 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 468 | CLANG_WARN_EMPTY_BODY = YES; 469 | CLANG_WARN_ENUM_CONVERSION = YES; 470 | CLANG_WARN_INFINITE_RECURSION = YES; 471 | CLANG_WARN_INT_CONVERSION = YES; 472 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 473 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 474 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 475 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 476 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 477 | CLANG_WARN_STRICT_PROTOTYPES = YES; 478 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 479 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 480 | CLANG_WARN_UNREACHABLE_CODE = YES; 481 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 482 | COPY_PHASE_STRIP = NO; 483 | CURRENT_PROJECT_VERSION = 1; 484 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 485 | ENABLE_NS_ASSERTIONS = NO; 486 | ENABLE_STRICT_OBJC_MSGSEND = YES; 487 | GCC_C_LANGUAGE_STANDARD = gnu11; 488 | GCC_NO_COMMON_BLOCKS = YES; 489 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 490 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 491 | GCC_WARN_UNDECLARED_SELECTOR = YES; 492 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 493 | GCC_WARN_UNUSED_FUNCTION = YES; 494 | GCC_WARN_UNUSED_VARIABLE = YES; 495 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 496 | MTL_ENABLE_DEBUG_INFO = NO; 497 | MTL_FAST_MATH = YES; 498 | SDKROOT = iphoneos; 499 | SWIFT_COMPILATION_MODE = wholemodule; 500 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 501 | VALIDATE_PRODUCT = YES; 502 | VERSIONING_SYSTEM = "apple-generic"; 503 | VERSION_INFO_PREFIX = ""; 504 | }; 505 | name = Release; 506 | }; 507 | 32CF584F243F5C7D00CA58E1 /* Debug */ = { 508 | isa = XCBuildConfiguration; 509 | buildSettings = { 510 | CLANG_ENABLE_MODULES = YES; 511 | CODE_SIGN_STYLE = Automatic; 512 | DEFINES_MODULE = YES; 513 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 514 | DYLIB_COMPATIBILITY_VERSION = 1; 515 | DYLIB_CURRENT_VERSION = 1; 516 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 517 | INFOPLIST_FILE = ZGRatingView/Info.plist; 518 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 519 | LD_RUNPATH_SEARCH_PATHS = ( 520 | "$(inherited)", 521 | "@executable_path/Frameworks", 522 | "@loader_path/Frameworks", 523 | ); 524 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingView; 525 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 526 | SKIP_INSTALL = YES; 527 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 528 | SWIFT_VERSION = 5.0; 529 | TARGETED_DEVICE_FAMILY = "1,2"; 530 | }; 531 | name = Debug; 532 | }; 533 | 32CF5850243F5C7D00CA58E1 /* Release */ = { 534 | isa = XCBuildConfiguration; 535 | buildSettings = { 536 | CLANG_ENABLE_MODULES = YES; 537 | CODE_SIGN_STYLE = Automatic; 538 | DEFINES_MODULE = YES; 539 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 540 | DYLIB_COMPATIBILITY_VERSION = 1; 541 | DYLIB_CURRENT_VERSION = 1; 542 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 543 | INFOPLIST_FILE = ZGRatingView/Info.plist; 544 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 545 | LD_RUNPATH_SEARCH_PATHS = ( 546 | "$(inherited)", 547 | "@executable_path/Frameworks", 548 | "@loader_path/Frameworks", 549 | ); 550 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingView; 551 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 552 | SKIP_INSTALL = YES; 553 | SWIFT_VERSION = 5.0; 554 | TARGETED_DEVICE_FAMILY = "1,2"; 555 | }; 556 | name = Release; 557 | }; 558 | 32CF5852243F5C7D00CA58E1 /* Debug */ = { 559 | isa = XCBuildConfiguration; 560 | buildSettings = { 561 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 562 | CODE_SIGN_STYLE = Automatic; 563 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 564 | INFOPLIST_FILE = ZGRatingViewTests/Info.plist; 565 | LD_RUNPATH_SEARCH_PATHS = ( 566 | "$(inherited)", 567 | "@executable_path/Frameworks", 568 | "@loader_path/Frameworks", 569 | ); 570 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingViewTests; 571 | PRODUCT_NAME = "$(TARGET_NAME)"; 572 | SWIFT_VERSION = 5.0; 573 | TARGETED_DEVICE_FAMILY = "1,2"; 574 | }; 575 | name = Debug; 576 | }; 577 | 32CF5853243F5C7D00CA58E1 /* Release */ = { 578 | isa = XCBuildConfiguration; 579 | buildSettings = { 580 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 581 | CODE_SIGN_STYLE = Automatic; 582 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 583 | INFOPLIST_FILE = ZGRatingViewTests/Info.plist; 584 | LD_RUNPATH_SEARCH_PATHS = ( 585 | "$(inherited)", 586 | "@executable_path/Frameworks", 587 | "@loader_path/Frameworks", 588 | ); 589 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingViewTests; 590 | PRODUCT_NAME = "$(TARGET_NAME)"; 591 | SWIFT_VERSION = 5.0; 592 | TARGETED_DEVICE_FAMILY = "1,2"; 593 | }; 594 | name = Release; 595 | }; 596 | 32CF5875243F5CB100CA58E1 /* Debug */ = { 597 | isa = XCBuildConfiguration; 598 | buildSettings = { 599 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 600 | CODE_SIGN_STYLE = Automatic; 601 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 602 | INFOPLIST_FILE = ZGRatingViewExample/Info.plist; 603 | LD_RUNPATH_SEARCH_PATHS = ( 604 | "$(inherited)", 605 | "@executable_path/Frameworks", 606 | ); 607 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingViewExample; 608 | PRODUCT_NAME = "$(TARGET_NAME)"; 609 | SWIFT_VERSION = 5.0; 610 | TARGETED_DEVICE_FAMILY = "1,2"; 611 | }; 612 | name = Debug; 613 | }; 614 | 32CF5876243F5CB100CA58E1 /* Release */ = { 615 | isa = XCBuildConfiguration; 616 | buildSettings = { 617 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 618 | CODE_SIGN_STYLE = Automatic; 619 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 620 | INFOPLIST_FILE = ZGRatingViewExample/Info.plist; 621 | LD_RUNPATH_SEARCH_PATHS = ( 622 | "$(inherited)", 623 | "@executable_path/Frameworks", 624 | ); 625 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingViewExample; 626 | PRODUCT_NAME = "$(TARGET_NAME)"; 627 | SWIFT_VERSION = 5.0; 628 | TARGETED_DEVICE_FAMILY = "1,2"; 629 | }; 630 | name = Release; 631 | }; 632 | 32CF5878243F5CB100CA58E1 /* Debug */ = { 633 | isa = XCBuildConfiguration; 634 | buildSettings = { 635 | BUNDLE_LOADER = "$(TEST_HOST)"; 636 | CODE_SIGN_STYLE = Automatic; 637 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 638 | INFOPLIST_FILE = ZGRatingViewExampleTests/Info.plist; 639 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 640 | LD_RUNPATH_SEARCH_PATHS = ( 641 | "$(inherited)", 642 | "@executable_path/Frameworks", 643 | "@loader_path/Frameworks", 644 | ); 645 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingViewExampleTests; 646 | PRODUCT_NAME = "$(TARGET_NAME)"; 647 | SWIFT_VERSION = 5.0; 648 | TARGETED_DEVICE_FAMILY = "1,2"; 649 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ZGRatingViewExample.app/ZGRatingViewExample"; 650 | }; 651 | name = Debug; 652 | }; 653 | 32CF5879243F5CB100CA58E1 /* Release */ = { 654 | isa = XCBuildConfiguration; 655 | buildSettings = { 656 | BUNDLE_LOADER = "$(TEST_HOST)"; 657 | CODE_SIGN_STYLE = Automatic; 658 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 659 | INFOPLIST_FILE = ZGRatingViewExampleTests/Info.plist; 660 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 661 | LD_RUNPATH_SEARCH_PATHS = ( 662 | "$(inherited)", 663 | "@executable_path/Frameworks", 664 | "@loader_path/Frameworks", 665 | ); 666 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.ZGRatingViewExampleTests; 667 | PRODUCT_NAME = "$(TARGET_NAME)"; 668 | SWIFT_VERSION = 5.0; 669 | TARGETED_DEVICE_FAMILY = "1,2"; 670 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ZGRatingViewExample.app/ZGRatingViewExample"; 671 | }; 672 | name = Release; 673 | }; 674 | /* End XCBuildConfiguration section */ 675 | 676 | /* Begin XCConfigurationList section */ 677 | 32CF5834243F5C7D00CA58E1 /* Build configuration list for PBXProject "ZGRatingView" */ = { 678 | isa = XCConfigurationList; 679 | buildConfigurations = ( 680 | 32CF584C243F5C7D00CA58E1 /* Debug */, 681 | 32CF584D243F5C7D00CA58E1 /* Release */, 682 | ); 683 | defaultConfigurationIsVisible = 0; 684 | defaultConfigurationName = Release; 685 | }; 686 | 32CF584E243F5C7D00CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingView" */ = { 687 | isa = XCConfigurationList; 688 | buildConfigurations = ( 689 | 32CF584F243F5C7D00CA58E1 /* Debug */, 690 | 32CF5850243F5C7D00CA58E1 /* Release */, 691 | ); 692 | defaultConfigurationIsVisible = 0; 693 | defaultConfigurationName = Release; 694 | }; 695 | 32CF5851243F5C7D00CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingViewTests" */ = { 696 | isa = XCConfigurationList; 697 | buildConfigurations = ( 698 | 32CF5852243F5C7D00CA58E1 /* Debug */, 699 | 32CF5853243F5C7D00CA58E1 /* Release */, 700 | ); 701 | defaultConfigurationIsVisible = 0; 702 | defaultConfigurationName = Release; 703 | }; 704 | 32CF5874243F5CB100CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingViewExample" */ = { 705 | isa = XCConfigurationList; 706 | buildConfigurations = ( 707 | 32CF5875243F5CB100CA58E1 /* Debug */, 708 | 32CF5876243F5CB100CA58E1 /* Release */, 709 | ); 710 | defaultConfigurationIsVisible = 0; 711 | defaultConfigurationName = Release; 712 | }; 713 | 32CF5877243F5CB100CA58E1 /* Build configuration list for PBXNativeTarget "ZGRatingViewExampleTests" */ = { 714 | isa = XCConfigurationList; 715 | buildConfigurations = ( 716 | 32CF5878243F5CB100CA58E1 /* Debug */, 717 | 32CF5879243F5CB100CA58E1 /* Release */, 718 | ); 719 | defaultConfigurationIsVisible = 0; 720 | defaultConfigurationName = Release; 721 | }; 722 | /* End XCConfigurationList section */ 723 | }; 724 | rootObject = 32CF5831243F5C7D00CA58E1 /* Project object */; 725 | } 726 | -------------------------------------------------------------------------------- /ZGRatingView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ZGRatingView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ZGRatingView.xcodeproj/xcuserdata/zyadgalal.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ZGRatingView.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | ZGRatingViewExample.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ZGRatingView/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /ZGRatingView/Assets/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "baseline_star_black_18dp.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "baseline_star_black_18dp-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp-1.png -------------------------------------------------------------------------------- /ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp.png -------------------------------------------------------------------------------- /ZGRatingView/Classes/Extension/UIImageExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageExtension.swift 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/7/20. 6 | // Copyright © 2020 macOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | extension UIImage { 13 | static func gradientImage(with bounds: CGRect,colors: [CGColor]) -> UIImage? { 14 | 15 | let gradientLayer = CAGradientLayer() 16 | gradientLayer.frame = bounds 17 | gradientLayer.colors = colors 18 | // This makes it horizontal 19 | gradientLayer.startPoint = CGPoint(x: 0.0, 20 | y: 0.5) 21 | gradientLayer.endPoint = CGPoint(x: 1.0, 22 | y: 0.5) 23 | 24 | UIGraphicsBeginImageContext(gradientLayer.bounds.size) 25 | gradientLayer.render(in: UIGraphicsGetCurrentContext()!) 26 | guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return nil } 27 | UIGraphicsEndImageContext() 28 | return image 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ZGRatingView/Classes/Extension/UIViewExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewExtension.swift 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/6/20. 6 | // Copyright © 2020 macOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIView { 12 | /** Loads instance from nib with the same name. */ 13 | func loadNib() -> UIView { 14 | let bundle = Bundle(for: type(of: self)) 15 | let nibName = type(of: self).description().components(separatedBy: ".").last! 16 | let nib = UINib(nibName: nibName, bundle: bundle) 17 | return nib.instantiate(withOwner: self, options: nil).first as! UIView 18 | } 19 | 20 | func xibSetup() { 21 | backgroundColor = UIColor.white 22 | // use bounds not frame or it'll be offset 23 | self.frame = bounds 24 | // Adding custom subview on top of our view 25 | addSubview(self) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ZGRatingView/Classes/ProgressBarColorStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressBarColorStyle.swift 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/7/20. 6 | // Copyright © 2020 macOS. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | enum ProgressBarColorStyle { 13 | case solid,gradient 14 | } 15 | -------------------------------------------------------------------------------- /ZGRatingView/Classes/ZGRatingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ZGRatingView.swift 3 | // ZGRatingView 4 | // 5 | // Created by ZyadGalal on 11/14/19. 6 | // Copyright © 2019 ZyadGalal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @IBDesignable 12 | final public class ZGRatingView: UIView { 13 | //private IBOutlet Collection 14 | @IBOutlet private (set) var starsImageView: [UIImageView]! 15 | @IBOutlet private (set) var progressBarWidthConstraints: [NSLayoutConstraint]! 16 | 17 | // private IBOutlet 18 | @IBOutlet private (set) weak var barContainerStackView: UIStackView! 19 | @IBOutlet private (set) weak var containerView: UIView! 20 | @IBOutlet private (set) weak var currentAverageLabel: UILabel! 21 | @IBOutlet private (set) weak var totalAverageLabel: UILabel! 22 | @IBOutlet private (set) weak var fiveRatingProgressView: UIProgressView! 23 | @IBOutlet private (set) weak var fourRatingProgressView: UIProgressView! 24 | @IBOutlet private (set) weak var threeRatingProgressView: UIProgressView! 25 | @IBOutlet private (set) weak var twoRatingProgressView: UIProgressView! 26 | @IBOutlet private (set) weak var oneRatingProgressView: UIProgressView! 27 | @IBOutlet private (set) weak var totalRatingLabel: UILabel! 28 | 29 | //MARK :- Private Inspectable 30 | @IBInspectable private (set) var animationTime: CGFloat = 1.0 31 | @IBInspectable private (set) var isGradient: Bool = false { 32 | didSet { 33 | progressStyle = isGradient == false ? .solid : .gradient 34 | setProgressTintColor() 35 | } 36 | } 37 | @IBInspectable private (set) var progressTint: UIColor = UIColor.darkGray { 38 | didSet { 39 | setProgressTintColor() 40 | } 41 | } 42 | @IBInspectable private (set) var startProgressTint: UIColor = UIColor.darkGray { 43 | didSet { 44 | setProgressTintColor() 45 | } 46 | } 47 | @IBInspectable private (set) var endProgressTint: UIColor = UIColor.darkGray { 48 | didSet { 49 | setProgressTintColor() 50 | } 51 | } 52 | @IBInspectable private (set) var starsImage: UIImage?{ 53 | didSet { 54 | for image in starsImageView { 55 | image.image = starsImage 56 | } 57 | } 58 | } 59 | @IBInspectable private (set) var barsSpacing : CGFloat = 1 { 60 | didSet { 61 | barsSpacing = max(1, barsSpacing) 62 | barContainerStackView.spacing = barsSpacing 63 | } 64 | } 65 | 66 | @IBInspectable private (set) var barWidth : CGFloat = 2 { 67 | didSet { 68 | barWidth = max(1, barWidth) 69 | for barWidthConstraint in progressBarWidthConstraints { 70 | barWidthConstraint.constant = barWidth 71 | self.layoutIfNeeded() 72 | } 73 | } 74 | } 75 | 76 | //Private Variables 77 | private var progressStyle: ProgressBarColorStyle = .solid 78 | 79 | //view init 80 | override init(frame: CGRect) { 81 | super.init(frame: frame) 82 | 83 | // Setup view from .xib file 84 | containerView = loadNib() 85 | containerView.xibSetup() 86 | } 87 | 88 | required init?(coder aDecoder: NSCoder) { 89 | super.init(coder: aDecoder) 90 | 91 | // Setup view from .xib file 92 | containerView = loadNib() 93 | containerView.xibSetup() 94 | 95 | } 96 | //MARK:- setup rating view >> used instead of using storyboard to customize rating view design 97 | public func setupRatingView(animationTime: CGFloat?,isProgressStyleGradient: Bool?,progressTint: UIColor?,startProgressTint: UIColor?,endProgressTint: UIColor?,starsImage: UIImage?,barsSpacing: CGFloat?,barWidth: CGFloat?){ 98 | 99 | if let animationTime = animationTime { 100 | self.animationTime = animationTime 101 | } 102 | if let GradientProgressBar = isProgressStyleGradient { 103 | self.isGradient = GradientProgressBar 104 | } 105 | if let progressTint = progressTint { 106 | self.progressTint = progressTint 107 | } 108 | if let startProgressTint = startProgressTint { 109 | self.startProgressTint = startProgressTint 110 | } 111 | if let endProgressTint = endProgressTint { 112 | self.endProgressTint = endProgressTint 113 | } 114 | if let stars = starsImage { 115 | self.starsImage = stars 116 | } 117 | if let barsSpacing = barsSpacing { 118 | self.barsSpacing = barsSpacing 119 | } 120 | if let barWidth = barWidth { 121 | self.barWidth = barWidth 122 | } 123 | } 124 | //MARK: - calculate average for every star based on total rating and number of stars given to every star rating 125 | public func calculateStarsValues(totalRating: Int,fiveStars: Float,fourStars: Float,threeStars: Float,twoStars: Float,oneStar: Float){ 126 | let totalRating = Float(totalRating) 127 | 128 | if totalRating == (fiveStars + fourStars + threeStars + twoStars + oneStar) { 129 | //calculate average for every progress view 130 | let fiveStarsAverage = fiveStars / totalRating 131 | let fourStarsAverage = fourStars / totalRating 132 | let threeStarsAverage = threeStars / totalRating 133 | let twoStarsAverage = twoStars / totalRating 134 | let oneStarAverage = oneStar / totalRating 135 | let average = ((fiveStars * 5.0) + (fourStars * 4.0) + (threeStars * 3.0) + (twoStars * 2.0) + (oneStar * 1.0)) / totalRating 136 | 137 | //set text to total rating label 138 | self.totalRatingLabel.text = "\(totalRating) Ratings" 139 | //formate average number to frist float digit 140 | let averageFormatter = String(format: "%.1f", average) 141 | self.currentAverageLabel.text = "\(averageFormatter)" 142 | 143 | setValuesForProgressBars(fiveStarsProgress: fiveStarsAverage, fourStarsProgress: fourStarsAverage, threeStarsProgress: threeStarsAverage, twoStarsProgress: twoStarsAverage, oneStarsProgress: oneStarAverage) 144 | 145 | }else{ 146 | fatalError("total rating must be equal to the sum of all stars") 147 | } 148 | } 149 | 150 | //MARK: -set starts value for every progress view 151 | private func setValuesForProgressBars(fiveStarsProgress: Float,fourStarsProgress: Float,threeStarsProgress: Float,twoStarsProgress: Float,oneStarsProgress: Float){ 152 | UIView.animate(withDuration: TimeInterval(animationTime)) { 153 | self.fiveRatingProgressView.setProgress(fiveStarsProgress, animated: true) 154 | self.fourRatingProgressView.setProgress(fourStarsProgress, animated: true) 155 | self.threeRatingProgressView.setProgress(threeStarsProgress, animated: true) 156 | self.twoRatingProgressView.setProgress(twoStarsProgress, animated: true) 157 | self.oneRatingProgressView.setProgress(oneStarsProgress, animated: true) 158 | } 159 | } 160 | 161 | private func setProgressTintColor(){ 162 | if progressStyle == .solid { 163 | fiveRatingProgressView.tintColor = progressTint 164 | fourRatingProgressView.tintColor = progressTint 165 | threeRatingProgressView.tintColor = progressTint 166 | twoRatingProgressView.tintColor = progressTint 167 | oneRatingProgressView.tintColor = progressTint 168 | } else if progressStyle == .gradient { 169 | guard let gradientImage = UIImage.gradientImage(with: fiveRatingProgressView.frame, colors: [startProgressTint.cgColor , endProgressTint.cgColor]) else{return} 170 | fiveRatingProgressView.progressImage = gradientImage 171 | fourRatingProgressView.progressImage = gradientImage 172 | threeRatingProgressView.progressImage = gradientImage 173 | twoRatingProgressView.progressImage = gradientImage 174 | oneRatingProgressView.progressImage = gradientImage 175 | } 176 | } 177 | } 178 | 179 | 180 | -------------------------------------------------------------------------------- /ZGRatingView/Classes/ZGRatingView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 59 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | -------------------------------------------------------------------------------- /ZGRatingView/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /ZGRatingView/ZGRatingView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZGRatingView.h 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/9/20. 6 | // Copyright © 2020 Zyad Galal. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ZGRatingView. 12 | FOUNDATION_EXPORT double ZGRatingViewVersionNumber; 13 | 14 | //! Project version string for ZGRatingView. 15 | FOUNDATION_EXPORT const unsigned char ZGRatingViewVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /ZGRatingViewTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ZGRatingViewTests/ZGRatingViewTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ZGRatingViewTests.swift 3 | // ZGRatingViewTests 4 | // 5 | // Created by Zyad Galal on 4/9/20. 6 | // Copyright © 2020 Zyad Galal. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ZGRatingView 11 | 12 | class ZGRatingViewTests: XCTestCase { 13 | 14 | override func setUpWithError() throws { 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDownWithError() throws { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() throws { 23 | // This is an example of a functional test case. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | func testPerformanceExample() throws { 28 | // This is an example of a performance test case. 29 | self.measure { 30 | // Put the code you want to measure the time of here. 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /example/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'example' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for example 9 | pod 'ZGRatingView' 10 | end 11 | -------------------------------------------------------------------------------- /example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ZGRatingView (0.1.6) 3 | 4 | DEPENDENCIES: 5 | - ZGRatingView 6 | 7 | SPEC REPOS: 8 | trunk: 9 | - ZGRatingView 10 | 11 | SPEC CHECKSUMS: 12 | ZGRatingView: f1ddf82047bebb63459234bbb9a5632694f42876 13 | 14 | PODFILE CHECKSUM: 010f5c079cd213c267e2b5c78521eddf65508e1e 15 | 16 | COCOAPODS: 1.8.4 17 | -------------------------------------------------------------------------------- /example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ZGRatingView (0.1.6) 3 | 4 | DEPENDENCIES: 5 | - ZGRatingView 6 | 7 | SPEC REPOS: 8 | trunk: 9 | - ZGRatingView 10 | 11 | SPEC CHECKSUMS: 12 | ZGRatingView: f1ddf82047bebb63459234bbb9a5632694f42876 13 | 14 | PODFILE CHECKSUM: 010f5c079cd213c267e2b5c78521eddf65508e1e 15 | 16 | COCOAPODS: 1.8.4 17 | -------------------------------------------------------------------------------- /example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1DA7C5E916C61C77ED95993DB8483859 /* UIImageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6ECF25C1E4C5E12C89FC33427A43665 /* UIImageExtension.swift */; }; 11 | 220FE86315618F7E61971625E4F5A2BA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 47F44683CEFF708CC87DED9E3E11E683 /* Assets.xcassets */; }; 12 | 5F8F5B01B9AE3E6EFFCD900FDE10FC48 /* ZGRatingView.xib in Sources */ = {isa = PBXBuildFile; fileRef = 14BCEF02E4AB10726732CAA24F87BA53 /* ZGRatingView.xib */; }; 13 | 7CCE1086AB629097EDBF82B8862FBA8B /* ZGRatingView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FC5D8FC185649A901F62737D310CCE1 /* ZGRatingView-dummy.m */; }; 14 | 979514648F92F35AA51BB64C19C2AD5D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 15 | 9EA0FBA1A533A76F850B33B1CAA09C8B /* Pods-example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9B306B206F90F2B9FEFECBB5C3CB65 /* Pods-example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | A2B0D0856F31C06AF1AA90314328E7B9 /* ZGRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3CA7A5E617BC6C71F0C8DE6DF43F318 /* ZGRatingView.swift */; }; 17 | A5BE3672051F48BA96B4FD5F7D035B6B /* ZGRatingView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A642910281033243661ADB2DA90F308A /* ZGRatingView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | B1B2EEE95A2F877A442C1AEC1BBB2764 /* Pods-example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 366C81F63378C4CCA862A6E36F3D0BCF /* Pods-example-dummy.m */; }; 19 | CADF11B6446FB4041B2F1480BA6E001C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 20 | EB901C70825B73B7D9DEB4882FBB9579 /* ProgressBarColorStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C9C7562A99EFC00C48E439DD02F7BC /* ProgressBarColorStyle.swift */; }; 21 | FA4B5321250A3D6EB585C1D99C5BC957 /* UIViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AD7CD101C290DC18224253CEACA2D1 /* UIViewExtension.swift */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | 6DE911BA94B818398B85B4C1C7B402B8 /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = 4660642E394EF2F81B3334E9DDC0E7AC; 30 | remoteInfo = ZGRatingView; 31 | }; 32 | /* End PBXContainerItemProxy section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 01B3C256378360BC3C60FCF0D3250C84 /* ZGRatingView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZGRatingView.xcconfig; sourceTree = ""; }; 36 | 14BCEF02E4AB10726732CAA24F87BA53 /* ZGRatingView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = ZGRatingView.xib; path = ZGRatingView/Classes/ZGRatingView.xib; sourceTree = ""; }; 37 | 2F953E63C99E3C33059E888CEA88AC4B /* Pods-example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-example-acknowledgements.plist"; sourceTree = ""; }; 38 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 39 | 366C81F63378C4CCA862A6E36F3D0BCF /* Pods-example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-example-dummy.m"; sourceTree = ""; }; 40 | 3FC5D8FC185649A901F62737D310CCE1 /* ZGRatingView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZGRatingView-dummy.m"; sourceTree = ""; }; 41 | 47F44683CEFF708CC87DED9E3E11E683 /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = ZGRatingView/Assets/Assets.xcassets; sourceTree = ""; }; 42 | 4ED2EAEC295A5C36F812B9C3CFE0E818 /* Pods-example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-example-Info.plist"; sourceTree = ""; }; 43 | 60708C5F2CB57FC80C7CA37A5E177499 /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-example.debug.xcconfig"; sourceTree = ""; }; 44 | 82441A4CB734F9AA2931B777ABE4369B /* ZGRatingView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZGRatingView-Info.plist"; sourceTree = ""; }; 45 | 83BF4AA5F8BD685146152FE09B14644E /* ZGRatingView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZGRatingView-prefix.pch"; sourceTree = ""; }; 46 | 8C0744503EFAEDCF47BFA6CF4FA15059 /* Pods-example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-example-acknowledgements.markdown"; sourceTree = ""; }; 47 | 8DC343797FE6CDCA192017C12DAE8029 /* Pods-example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-example.modulemap"; sourceTree = ""; }; 48 | 98AD7CD101C290DC18224253CEACA2D1 /* UIViewExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewExtension.swift; path = ZGRatingView/Classes/Extension/UIViewExtension.swift; sourceTree = ""; }; 49 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 50 | A642910281033243661ADB2DA90F308A /* ZGRatingView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZGRatingView-umbrella.h"; sourceTree = ""; }; 51 | A9E71BBE73AC44290BD2329F0BA1B094 /* Pods-example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-example-frameworks.sh"; sourceTree = ""; }; 52 | AB250148864532E69EF181398189F948 /* ZGRatingView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZGRatingView.framework; path = ZGRatingView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | BF9B306B206F90F2B9FEFECBB5C3CB65 /* Pods-example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-example-umbrella.h"; sourceTree = ""; }; 54 | C3C9C7562A99EFC00C48E439DD02F7BC /* ProgressBarColorStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProgressBarColorStyle.swift; path = ZGRatingView/Classes/ProgressBarColorStyle.swift; sourceTree = ""; }; 55 | E6ECF25C1E4C5E12C89FC33427A43665 /* UIImageExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImageExtension.swift; path = ZGRatingView/Classes/Extension/UIImageExtension.swift; sourceTree = ""; }; 56 | F199D42AE3B25C06D9BEBB595138E0BD /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-example.release.xcconfig"; sourceTree = ""; }; 57 | F36FD2DF40C927785BB0CFEAE0C76C40 /* ZGRatingView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZGRatingView.modulemap; sourceTree = ""; }; 58 | F3CA7A5E617BC6C71F0C8DE6DF43F318 /* ZGRatingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZGRatingView.swift; path = ZGRatingView/Classes/ZGRatingView.swift; sourceTree = ""; }; 59 | FE738AB7B951E639221DD37AAF252244 /* Pods_example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_example.framework; path = "Pods-example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | /* End PBXFileReference section */ 61 | 62 | /* Begin PBXFrameworksBuildPhase section */ 63 | 2DD5FD9574084A17A5931A9C22AF38CE /* Frameworks */ = { 64 | isa = PBXFrameworksBuildPhase; 65 | buildActionMask = 2147483647; 66 | files = ( 67 | CADF11B6446FB4041B2F1480BA6E001C /* Foundation.framework in Frameworks */, 68 | ); 69 | runOnlyForDeploymentPostprocessing = 0; 70 | }; 71 | 99DC5A4B6F920CCA8F892B7040298DDF /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | 979514648F92F35AA51BB64C19C2AD5D /* Foundation.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | /* End PBXFrameworksBuildPhase section */ 80 | 81 | /* Begin PBXGroup section */ 82 | 0A4559C21EA943E1FB593DDB8FD0ED00 /* Support Files */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | F36FD2DF40C927785BB0CFEAE0C76C40 /* ZGRatingView.modulemap */, 86 | 01B3C256378360BC3C60FCF0D3250C84 /* ZGRatingView.xcconfig */, 87 | 3FC5D8FC185649A901F62737D310CCE1 /* ZGRatingView-dummy.m */, 88 | 82441A4CB734F9AA2931B777ABE4369B /* ZGRatingView-Info.plist */, 89 | 83BF4AA5F8BD685146152FE09B14644E /* ZGRatingView-prefix.pch */, 90 | A642910281033243661ADB2DA90F308A /* ZGRatingView-umbrella.h */, 91 | ); 92 | name = "Support Files"; 93 | path = "../Target Support Files/ZGRatingView"; 94 | sourceTree = ""; 95 | }; 96 | 1108087CB322CD4B0DECB2376F668616 /* Resources */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 47F44683CEFF708CC87DED9E3E11E683 /* Assets.xcassets */, 100 | ); 101 | name = Resources; 102 | sourceTree = ""; 103 | }; 104 | 2BCF16978EC2F0B687CAFB8E056ED592 /* Targets Support Files */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 67CDC8731A7C90664346A6A36C03DF29 /* Pods-example */, 108 | ); 109 | name = "Targets Support Files"; 110 | sourceTree = ""; 111 | }; 112 | 451D6211B7B5D7897A834D38ABC7FE53 /* ZGRatingView */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | C3C9C7562A99EFC00C48E439DD02F7BC /* ProgressBarColorStyle.swift */, 116 | E6ECF25C1E4C5E12C89FC33427A43665 /* UIImageExtension.swift */, 117 | 98AD7CD101C290DC18224253CEACA2D1 /* UIViewExtension.swift */, 118 | F3CA7A5E617BC6C71F0C8DE6DF43F318 /* ZGRatingView.swift */, 119 | 14BCEF02E4AB10726732CAA24F87BA53 /* ZGRatingView.xib */, 120 | 1108087CB322CD4B0DECB2376F668616 /* Resources */, 121 | 0A4559C21EA943E1FB593DDB8FD0ED00 /* Support Files */, 122 | ); 123 | name = ZGRatingView; 124 | path = ZGRatingView; 125 | sourceTree = ""; 126 | }; 127 | 6206A202382A10B4FC7439C032179887 /* Pods */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 451D6211B7B5D7897A834D38ABC7FE53 /* ZGRatingView */, 131 | ); 132 | name = Pods; 133 | sourceTree = ""; 134 | }; 135 | 67CDC8731A7C90664346A6A36C03DF29 /* Pods-example */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 8DC343797FE6CDCA192017C12DAE8029 /* Pods-example.modulemap */, 139 | 8C0744503EFAEDCF47BFA6CF4FA15059 /* Pods-example-acknowledgements.markdown */, 140 | 2F953E63C99E3C33059E888CEA88AC4B /* Pods-example-acknowledgements.plist */, 141 | 366C81F63378C4CCA862A6E36F3D0BCF /* Pods-example-dummy.m */, 142 | A9E71BBE73AC44290BD2329F0BA1B094 /* Pods-example-frameworks.sh */, 143 | 4ED2EAEC295A5C36F812B9C3CFE0E818 /* Pods-example-Info.plist */, 144 | BF9B306B206F90F2B9FEFECBB5C3CB65 /* Pods-example-umbrella.h */, 145 | 60708C5F2CB57FC80C7CA37A5E177499 /* Pods-example.debug.xcconfig */, 146 | F199D42AE3B25C06D9BEBB595138E0BD /* Pods-example.release.xcconfig */, 147 | ); 148 | name = "Pods-example"; 149 | path = "Target Support Files/Pods-example"; 150 | sourceTree = ""; 151 | }; 152 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 153 | isa = PBXGroup; 154 | children = ( 155 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 156 | ); 157 | name = iOS; 158 | sourceTree = ""; 159 | }; 160 | CF1408CF629C7361332E53B88F7BD30C = { 161 | isa = PBXGroup; 162 | children = ( 163 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 164 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 165 | 6206A202382A10B4FC7439C032179887 /* Pods */, 166 | FECEAEFCBA50F62CB1B66634738C7B2A /* Products */, 167 | 2BCF16978EC2F0B687CAFB8E056ED592 /* Targets Support Files */, 168 | ); 169 | sourceTree = ""; 170 | }; 171 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 175 | ); 176 | name = Frameworks; 177 | sourceTree = ""; 178 | }; 179 | FECEAEFCBA50F62CB1B66634738C7B2A /* Products */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | FE738AB7B951E639221DD37AAF252244 /* Pods_example.framework */, 183 | AB250148864532E69EF181398189F948 /* ZGRatingView.framework */, 184 | ); 185 | name = Products; 186 | sourceTree = ""; 187 | }; 188 | /* End PBXGroup section */ 189 | 190 | /* Begin PBXHeadersBuildPhase section */ 191 | 302A71DA4DF3D3A98D759BF0EF256C11 /* Headers */ = { 192 | isa = PBXHeadersBuildPhase; 193 | buildActionMask = 2147483647; 194 | files = ( 195 | A5BE3672051F48BA96B4FD5F7D035B6B /* ZGRatingView-umbrella.h in Headers */, 196 | ); 197 | runOnlyForDeploymentPostprocessing = 0; 198 | }; 199 | FDD4A4EEAAEB30EE53FFE1823E62C831 /* Headers */ = { 200 | isa = PBXHeadersBuildPhase; 201 | buildActionMask = 2147483647; 202 | files = ( 203 | 9EA0FBA1A533A76F850B33B1CAA09C8B /* Pods-example-umbrella.h in Headers */, 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | /* End PBXHeadersBuildPhase section */ 208 | 209 | /* Begin PBXNativeTarget section */ 210 | 4660642E394EF2F81B3334E9DDC0E7AC /* ZGRatingView */ = { 211 | isa = PBXNativeTarget; 212 | buildConfigurationList = 81E01B173B17997EA98CB6914EB12919 /* Build configuration list for PBXNativeTarget "ZGRatingView" */; 213 | buildPhases = ( 214 | 302A71DA4DF3D3A98D759BF0EF256C11 /* Headers */, 215 | BBC9614803B026B79E0976B1234D6F17 /* Sources */, 216 | 2DD5FD9574084A17A5931A9C22AF38CE /* Frameworks */, 217 | E03953949A97858A2AD0C4B3DA97F95C /* Resources */, 218 | ); 219 | buildRules = ( 220 | ); 221 | dependencies = ( 222 | ); 223 | name = ZGRatingView; 224 | productName = ZGRatingView; 225 | productReference = AB250148864532E69EF181398189F948 /* ZGRatingView.framework */; 226 | productType = "com.apple.product-type.framework"; 227 | }; 228 | E50E2A72E7EAAEA9E840CAE2204A2A16 /* Pods-example */ = { 229 | isa = PBXNativeTarget; 230 | buildConfigurationList = 50381F67F91A3CFE417F41727CC20413 /* Build configuration list for PBXNativeTarget "Pods-example" */; 231 | buildPhases = ( 232 | FDD4A4EEAAEB30EE53FFE1823E62C831 /* Headers */, 233 | 5841084A0251E330B2978D908BCAFF19 /* Sources */, 234 | 99DC5A4B6F920CCA8F892B7040298DDF /* Frameworks */, 235 | 523E4451B72FFA576506A4942D3C5A9D /* Resources */, 236 | ); 237 | buildRules = ( 238 | ); 239 | dependencies = ( 240 | 535192729DFBD54A30F17CAE51F7ABB1 /* PBXTargetDependency */, 241 | ); 242 | name = "Pods-example"; 243 | productName = "Pods-example"; 244 | productReference = FE738AB7B951E639221DD37AAF252244 /* Pods_example.framework */; 245 | productType = "com.apple.product-type.framework"; 246 | }; 247 | /* End PBXNativeTarget section */ 248 | 249 | /* Begin PBXProject section */ 250 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 251 | isa = PBXProject; 252 | attributes = { 253 | LastSwiftUpdateCheck = 1100; 254 | LastUpgradeCheck = 1100; 255 | }; 256 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 257 | compatibilityVersion = "Xcode 9.3"; 258 | developmentRegion = en; 259 | hasScannedForEncodings = 0; 260 | knownRegions = ( 261 | en, 262 | Base, 263 | ); 264 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 265 | productRefGroup = FECEAEFCBA50F62CB1B66634738C7B2A /* Products */; 266 | projectDirPath = ""; 267 | projectRoot = ""; 268 | targets = ( 269 | E50E2A72E7EAAEA9E840CAE2204A2A16 /* Pods-example */, 270 | 4660642E394EF2F81B3334E9DDC0E7AC /* ZGRatingView */, 271 | ); 272 | }; 273 | /* End PBXProject section */ 274 | 275 | /* Begin PBXResourcesBuildPhase section */ 276 | 523E4451B72FFA576506A4942D3C5A9D /* Resources */ = { 277 | isa = PBXResourcesBuildPhase; 278 | buildActionMask = 2147483647; 279 | files = ( 280 | ); 281 | runOnlyForDeploymentPostprocessing = 0; 282 | }; 283 | E03953949A97858A2AD0C4B3DA97F95C /* Resources */ = { 284 | isa = PBXResourcesBuildPhase; 285 | buildActionMask = 2147483647; 286 | files = ( 287 | 220FE86315618F7E61971625E4F5A2BA /* Assets.xcassets in Resources */, 288 | ); 289 | runOnlyForDeploymentPostprocessing = 0; 290 | }; 291 | /* End PBXResourcesBuildPhase section */ 292 | 293 | /* Begin PBXSourcesBuildPhase section */ 294 | 5841084A0251E330B2978D908BCAFF19 /* Sources */ = { 295 | isa = PBXSourcesBuildPhase; 296 | buildActionMask = 2147483647; 297 | files = ( 298 | B1B2EEE95A2F877A442C1AEC1BBB2764 /* Pods-example-dummy.m in Sources */, 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | }; 302 | BBC9614803B026B79E0976B1234D6F17 /* Sources */ = { 303 | isa = PBXSourcesBuildPhase; 304 | buildActionMask = 2147483647; 305 | files = ( 306 | EB901C70825B73B7D9DEB4882FBB9579 /* ProgressBarColorStyle.swift in Sources */, 307 | 1DA7C5E916C61C77ED95993DB8483859 /* UIImageExtension.swift in Sources */, 308 | FA4B5321250A3D6EB585C1D99C5BC957 /* UIViewExtension.swift in Sources */, 309 | 7CCE1086AB629097EDBF82B8862FBA8B /* ZGRatingView-dummy.m in Sources */, 310 | A2B0D0856F31C06AF1AA90314328E7B9 /* ZGRatingView.swift in Sources */, 311 | 5F8F5B01B9AE3E6EFFCD900FDE10FC48 /* ZGRatingView.xib in Sources */, 312 | ); 313 | runOnlyForDeploymentPostprocessing = 0; 314 | }; 315 | /* End PBXSourcesBuildPhase section */ 316 | 317 | /* Begin PBXTargetDependency section */ 318 | 535192729DFBD54A30F17CAE51F7ABB1 /* PBXTargetDependency */ = { 319 | isa = PBXTargetDependency; 320 | name = ZGRatingView; 321 | target = 4660642E394EF2F81B3334E9DDC0E7AC /* ZGRatingView */; 322 | targetProxy = 6DE911BA94B818398B85B4C1C7B402B8 /* PBXContainerItemProxy */; 323 | }; 324 | /* End PBXTargetDependency section */ 325 | 326 | /* Begin XCBuildConfiguration section */ 327 | 1FA959963EB72592164688A1734D42F2 /* Debug */ = { 328 | isa = XCBuildConfiguration; 329 | baseConfigurationReference = 60708C5F2CB57FC80C7CA37A5E177499 /* Pods-example.debug.xcconfig */; 330 | buildSettings = { 331 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 332 | CLANG_ENABLE_OBJC_WEAK = NO; 333 | CODE_SIGN_IDENTITY = ""; 334 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 335 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 336 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 337 | CURRENT_PROJECT_VERSION = 1; 338 | DEFINES_MODULE = YES; 339 | DYLIB_COMPATIBILITY_VERSION = 1; 340 | DYLIB_CURRENT_VERSION = 1; 341 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 342 | INFOPLIST_FILE = "Target Support Files/Pods-example/Pods-example-Info.plist"; 343 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 344 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 345 | LD_RUNPATH_SEARCH_PATHS = ( 346 | "$(inherited)", 347 | "@executable_path/Frameworks", 348 | "@loader_path/Frameworks", 349 | ); 350 | MACH_O_TYPE = staticlib; 351 | MODULEMAP_FILE = "Target Support Files/Pods-example/Pods-example.modulemap"; 352 | OTHER_LDFLAGS = ""; 353 | OTHER_LIBTOOLFLAGS = ""; 354 | PODS_ROOT = "$(SRCROOT)"; 355 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 356 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 357 | SDKROOT = iphoneos; 358 | SKIP_INSTALL = YES; 359 | TARGETED_DEVICE_FAMILY = "1,2"; 360 | VERSIONING_SYSTEM = "apple-generic"; 361 | VERSION_INFO_PREFIX = ""; 362 | }; 363 | name = Debug; 364 | }; 365 | 49B53C7FC5FC95D50BD5D7AE1CBD4FAF /* Release */ = { 366 | isa = XCBuildConfiguration; 367 | baseConfigurationReference = F199D42AE3B25C06D9BEBB595138E0BD /* Pods-example.release.xcconfig */; 368 | buildSettings = { 369 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 370 | CLANG_ENABLE_OBJC_WEAK = NO; 371 | CODE_SIGN_IDENTITY = ""; 372 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 373 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 374 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 375 | CURRENT_PROJECT_VERSION = 1; 376 | DEFINES_MODULE = YES; 377 | DYLIB_COMPATIBILITY_VERSION = 1; 378 | DYLIB_CURRENT_VERSION = 1; 379 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 380 | INFOPLIST_FILE = "Target Support Files/Pods-example/Pods-example-Info.plist"; 381 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 382 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 383 | LD_RUNPATH_SEARCH_PATHS = ( 384 | "$(inherited)", 385 | "@executable_path/Frameworks", 386 | "@loader_path/Frameworks", 387 | ); 388 | MACH_O_TYPE = staticlib; 389 | MODULEMAP_FILE = "Target Support Files/Pods-example/Pods-example.modulemap"; 390 | OTHER_LDFLAGS = ""; 391 | OTHER_LIBTOOLFLAGS = ""; 392 | PODS_ROOT = "$(SRCROOT)"; 393 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 394 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 395 | SDKROOT = iphoneos; 396 | SKIP_INSTALL = YES; 397 | TARGETED_DEVICE_FAMILY = "1,2"; 398 | VALIDATE_PRODUCT = YES; 399 | VERSIONING_SYSTEM = "apple-generic"; 400 | VERSION_INFO_PREFIX = ""; 401 | }; 402 | name = Release; 403 | }; 404 | 532D95755E745B70B592FBB308A1BF48 /* Debug */ = { 405 | isa = XCBuildConfiguration; 406 | baseConfigurationReference = 01B3C256378360BC3C60FCF0D3250C84 /* ZGRatingView.xcconfig */; 407 | buildSettings = { 408 | CLANG_ENABLE_OBJC_WEAK = NO; 409 | CODE_SIGN_IDENTITY = ""; 410 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 411 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 412 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 413 | CURRENT_PROJECT_VERSION = 1; 414 | DEFINES_MODULE = YES; 415 | DYLIB_COMPATIBILITY_VERSION = 1; 416 | DYLIB_CURRENT_VERSION = 1; 417 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 418 | GCC_PREFIX_HEADER = "Target Support Files/ZGRatingView/ZGRatingView-prefix.pch"; 419 | INFOPLIST_FILE = "Target Support Files/ZGRatingView/ZGRatingView-Info.plist"; 420 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 421 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 422 | LD_RUNPATH_SEARCH_PATHS = ( 423 | "$(inherited)", 424 | "@executable_path/Frameworks", 425 | "@loader_path/Frameworks", 426 | ); 427 | MODULEMAP_FILE = "Target Support Files/ZGRatingView/ZGRatingView.modulemap"; 428 | PRODUCT_MODULE_NAME = ZGRatingView; 429 | PRODUCT_NAME = ZGRatingView; 430 | SDKROOT = iphoneos; 431 | SKIP_INSTALL = YES; 432 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 433 | SWIFT_VERSION = 5.0; 434 | TARGETED_DEVICE_FAMILY = "1,2"; 435 | VERSIONING_SYSTEM = "apple-generic"; 436 | VERSION_INFO_PREFIX = ""; 437 | }; 438 | name = Debug; 439 | }; 440 | 6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */ = { 441 | isa = XCBuildConfiguration; 442 | buildSettings = { 443 | ALWAYS_SEARCH_USER_PATHS = NO; 444 | CLANG_ANALYZER_NONNULL = YES; 445 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 446 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 447 | CLANG_CXX_LIBRARY = "libc++"; 448 | CLANG_ENABLE_MODULES = YES; 449 | CLANG_ENABLE_OBJC_ARC = YES; 450 | CLANG_ENABLE_OBJC_WEAK = YES; 451 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 452 | CLANG_WARN_BOOL_CONVERSION = YES; 453 | CLANG_WARN_COMMA = YES; 454 | CLANG_WARN_CONSTANT_CONVERSION = YES; 455 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 456 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 457 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 458 | CLANG_WARN_EMPTY_BODY = YES; 459 | CLANG_WARN_ENUM_CONVERSION = YES; 460 | CLANG_WARN_INFINITE_RECURSION = YES; 461 | CLANG_WARN_INT_CONVERSION = YES; 462 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 463 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 464 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 465 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 466 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 467 | CLANG_WARN_STRICT_PROTOTYPES = YES; 468 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 469 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 470 | CLANG_WARN_UNREACHABLE_CODE = YES; 471 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 472 | COPY_PHASE_STRIP = NO; 473 | DEBUG_INFORMATION_FORMAT = dwarf; 474 | ENABLE_STRICT_OBJC_MSGSEND = YES; 475 | ENABLE_TESTABILITY = YES; 476 | GCC_C_LANGUAGE_STANDARD = gnu11; 477 | GCC_DYNAMIC_NO_PIC = NO; 478 | GCC_NO_COMMON_BLOCKS = YES; 479 | GCC_OPTIMIZATION_LEVEL = 0; 480 | GCC_PREPROCESSOR_DEFINITIONS = ( 481 | "POD_CONFIGURATION_DEBUG=1", 482 | "DEBUG=1", 483 | "$(inherited)", 484 | ); 485 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 486 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 487 | GCC_WARN_UNDECLARED_SELECTOR = YES; 488 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 489 | GCC_WARN_UNUSED_FUNCTION = YES; 490 | GCC_WARN_UNUSED_VARIABLE = YES; 491 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 492 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 493 | MTL_FAST_MATH = YES; 494 | ONLY_ACTIVE_ARCH = YES; 495 | PRODUCT_NAME = "$(TARGET_NAME)"; 496 | STRIP_INSTALLED_PRODUCT = NO; 497 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 498 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 499 | SWIFT_VERSION = 5.0; 500 | SYMROOT = "${SRCROOT}/../build"; 501 | }; 502 | name = Debug; 503 | }; 504 | 7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */ = { 505 | isa = XCBuildConfiguration; 506 | buildSettings = { 507 | ALWAYS_SEARCH_USER_PATHS = NO; 508 | CLANG_ANALYZER_NONNULL = YES; 509 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 510 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 511 | CLANG_CXX_LIBRARY = "libc++"; 512 | CLANG_ENABLE_MODULES = YES; 513 | CLANG_ENABLE_OBJC_ARC = YES; 514 | CLANG_ENABLE_OBJC_WEAK = YES; 515 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 516 | CLANG_WARN_BOOL_CONVERSION = YES; 517 | CLANG_WARN_COMMA = YES; 518 | CLANG_WARN_CONSTANT_CONVERSION = YES; 519 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 520 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 521 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 522 | CLANG_WARN_EMPTY_BODY = YES; 523 | CLANG_WARN_ENUM_CONVERSION = YES; 524 | CLANG_WARN_INFINITE_RECURSION = YES; 525 | CLANG_WARN_INT_CONVERSION = YES; 526 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 527 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 528 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 529 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 530 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 531 | CLANG_WARN_STRICT_PROTOTYPES = YES; 532 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 533 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 534 | CLANG_WARN_UNREACHABLE_CODE = YES; 535 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 536 | COPY_PHASE_STRIP = NO; 537 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 538 | ENABLE_NS_ASSERTIONS = NO; 539 | ENABLE_STRICT_OBJC_MSGSEND = YES; 540 | GCC_C_LANGUAGE_STANDARD = gnu11; 541 | GCC_NO_COMMON_BLOCKS = YES; 542 | GCC_PREPROCESSOR_DEFINITIONS = ( 543 | "POD_CONFIGURATION_RELEASE=1", 544 | "$(inherited)", 545 | ); 546 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 547 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 548 | GCC_WARN_UNDECLARED_SELECTOR = YES; 549 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 550 | GCC_WARN_UNUSED_FUNCTION = YES; 551 | GCC_WARN_UNUSED_VARIABLE = YES; 552 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 553 | MTL_ENABLE_DEBUG_INFO = NO; 554 | MTL_FAST_MATH = YES; 555 | PRODUCT_NAME = "$(TARGET_NAME)"; 556 | STRIP_INSTALLED_PRODUCT = NO; 557 | SWIFT_COMPILATION_MODE = wholemodule; 558 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 559 | SWIFT_VERSION = 5.0; 560 | SYMROOT = "${SRCROOT}/../build"; 561 | }; 562 | name = Release; 563 | }; 564 | C50D16E34E4B9B7697A30BF2B737FFCD /* Release */ = { 565 | isa = XCBuildConfiguration; 566 | baseConfigurationReference = 01B3C256378360BC3C60FCF0D3250C84 /* ZGRatingView.xcconfig */; 567 | buildSettings = { 568 | CLANG_ENABLE_OBJC_WEAK = NO; 569 | CODE_SIGN_IDENTITY = ""; 570 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 571 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 572 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 573 | CURRENT_PROJECT_VERSION = 1; 574 | DEFINES_MODULE = YES; 575 | DYLIB_COMPATIBILITY_VERSION = 1; 576 | DYLIB_CURRENT_VERSION = 1; 577 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 578 | GCC_PREFIX_HEADER = "Target Support Files/ZGRatingView/ZGRatingView-prefix.pch"; 579 | INFOPLIST_FILE = "Target Support Files/ZGRatingView/ZGRatingView-Info.plist"; 580 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 581 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 582 | LD_RUNPATH_SEARCH_PATHS = ( 583 | "$(inherited)", 584 | "@executable_path/Frameworks", 585 | "@loader_path/Frameworks", 586 | ); 587 | MODULEMAP_FILE = "Target Support Files/ZGRatingView/ZGRatingView.modulemap"; 588 | PRODUCT_MODULE_NAME = ZGRatingView; 589 | PRODUCT_NAME = ZGRatingView; 590 | SDKROOT = iphoneos; 591 | SKIP_INSTALL = YES; 592 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 593 | SWIFT_VERSION = 5.0; 594 | TARGETED_DEVICE_FAMILY = "1,2"; 595 | VALIDATE_PRODUCT = YES; 596 | VERSIONING_SYSTEM = "apple-generic"; 597 | VERSION_INFO_PREFIX = ""; 598 | }; 599 | name = Release; 600 | }; 601 | /* End XCBuildConfiguration section */ 602 | 603 | /* Begin XCConfigurationList section */ 604 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 605 | isa = XCConfigurationList; 606 | buildConfigurations = ( 607 | 6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */, 608 | 7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */, 609 | ); 610 | defaultConfigurationIsVisible = 0; 611 | defaultConfigurationName = Release; 612 | }; 613 | 50381F67F91A3CFE417F41727CC20413 /* Build configuration list for PBXNativeTarget "Pods-example" */ = { 614 | isa = XCConfigurationList; 615 | buildConfigurations = ( 616 | 1FA959963EB72592164688A1734D42F2 /* Debug */, 617 | 49B53C7FC5FC95D50BD5D7AE1CBD4FAF /* Release */, 618 | ); 619 | defaultConfigurationIsVisible = 0; 620 | defaultConfigurationName = Release; 621 | }; 622 | 81E01B173B17997EA98CB6914EB12919 /* Build configuration list for PBXNativeTarget "ZGRatingView" */ = { 623 | isa = XCConfigurationList; 624 | buildConfigurations = ( 625 | 532D95755E745B70B592FBB308A1BF48 /* Debug */, 626 | C50D16E34E4B9B7697A30BF2B737FFCD /* Release */, 627 | ); 628 | defaultConfigurationIsVisible = 0; 629 | defaultConfigurationName = Release; 630 | }; 631 | /* End XCConfigurationList section */ 632 | }; 633 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 634 | } 635 | -------------------------------------------------------------------------------- /example/Pods/Pods.xcodeproj/xcuserdata/zyadgalal.xcuserdatad/xcschemes/Pods-example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /example/Pods/Pods.xcodeproj/xcuserdata/zyadgalal.xcuserdatad/xcschemes/ZGRatingView.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /example/Pods/Pods.xcodeproj/xcuserdata/zyadgalal.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-example.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | ZGRatingView.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 1 20 | 21 | 22 | SuppressBuildableAutocreation 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## ZGRatingView 5 | 6 | MIT License 7 | 8 | Copyright (c) 2020 Zyad Galal 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2020 Zyad Galal 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | ZGRatingView 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_example 5 | @end 6 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/ZGRatingView/ZGRatingView.framework -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZGRatingView.framework -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/ZGRatingView/ZGRatingView.framework -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZGRatingView.framework -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Copies the bcsymbolmap files of a vendored framework 113 | install_bcsymbolmap() { 114 | local bcsymbolmap_path="$1" 115 | local destination="${BUILT_PRODUCTS_DIR}" 116 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" 117 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 118 | } 119 | 120 | # Signs a framework with the provided identity 121 | code_sign_if_enabled() { 122 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 123 | # Use the current code_sign_identity 124 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 125 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 126 | 127 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 128 | code_sign_cmd="$code_sign_cmd &" 129 | fi 130 | echo "$code_sign_cmd" 131 | eval "$code_sign_cmd" 132 | fi 133 | } 134 | 135 | # Strip invalid architectures 136 | strip_invalid_archs() { 137 | binary="$1" 138 | # Get architectures for current target binary 139 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 140 | # Intersect them with the architectures we are building for 141 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 142 | # If there are no archs supported by this binary then warn the user 143 | if [[ -z "$intersected_archs" ]]; then 144 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 145 | STRIP_BINARY_RETVAL=0 146 | return 147 | fi 148 | stripped="" 149 | for arch in $binary_archs; do 150 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 151 | # Strip non-valid architectures in-place 152 | lipo -remove "$arch" -output "$binary" "$binary" 153 | stripped="$stripped $arch" 154 | fi 155 | done 156 | if [[ "$stripped" ]]; then 157 | echo "Stripped $binary of architectures:$stripped" 158 | fi 159 | STRIP_BINARY_RETVAL=1 160 | } 161 | 162 | 163 | if [[ "$CONFIGURATION" == "Debug" ]]; then 164 | install_framework "${BUILT_PRODUCTS_DIR}/ZGRatingView/ZGRatingView.framework" 165 | fi 166 | if [[ "$CONFIGURATION" == "Release" ]]; then 167 | install_framework "${BUILT_PRODUCTS_DIR}/ZGRatingView/ZGRatingView.framework" 168 | fi 169 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 170 | wait 171 | fi 172 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_exampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_exampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ZGRatingView" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ZGRatingView/ZGRatingView.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "ZGRatingView" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_example { 2 | umbrella header "Pods-example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/Pods-example/Pods-example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ZGRatingView" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ZGRatingView/ZGRatingView.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "ZGRatingView" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/ZGRatingView/ZGRatingView-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.6 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/ZGRatingView/ZGRatingView-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ZGRatingView : NSObject 3 | @end 4 | @implementation PodsDummy_ZGRatingView 5 | @end 6 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/ZGRatingView/ZGRatingView-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/ZGRatingView/ZGRatingView-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double ZGRatingViewVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char ZGRatingViewVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/ZGRatingView/ZGRatingView.modulemap: -------------------------------------------------------------------------------- 1 | framework module ZGRatingView { 2 | umbrella header "ZGRatingView-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /example/Pods/Target Support Files/ZGRatingView/ZGRatingView.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZGRatingView 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/ZGRatingView 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Zyad Galal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |
6 | ZGRatingView is a layout that adds a "Rating & Reviews" bar to your app, similar to the ones seen on Apple App Store . It provides a beautiful visual summary of the number of raters along with the ratings they gave on a specific item. 7 | 8 |
9 |
10 | - [Screenshots](#screenshots) 11 | - [Requirements](#requirements) 12 | - [Installation](#installation) 13 | - [Cocoapods](#cocoapods) 14 | - [Usage](#usage) 15 | - [Storyboard](#storyboard) 16 | - [Customize UI](#customizeui) 17 | - [Author](#author) 18 | - [Credits](#credits) 19 | - [License](#license) 20 | 21 | 22 | ## Screenshots 23 | 24 | | Style | Screenshot | 25 | |:-------------:|:-------------:| 26 | | Default bar color | | 27 | | Custom Solid bar color | | 28 | | Custom Gradient bar color | | 29 | 30 | ## Requirements 31 | 32 | * Xcode 10.2+ 33 | * Swift 5+ 34 | * iOS 10+ 35 | 36 | ## Installation 37 | 38 | ### CocoaPods 39 | 40 | [CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate SwiftyMenu into your Xcode project using CocoaPods, specify it in your `Podfile`: 41 | 42 | ```ruby 43 | pod 'ZGRatingView', '~> 0.1.6' 44 | ``` 45 | 46 | ## Usage 47 | ### Storyboard 48 | 49 | 50 | Then from your Storyboard you can connect your Outlet and set rating values 51 | ```swift 52 | 53 | ratingView.calculateStarsValues(totalRating: 5, 54 | fiveStars: 2, 55 | fourStars: 2, 56 | threeStars: 0, 57 | twoStars: 0, 58 | oneStar:1) 59 | ```` 60 | 61 | ### CustomizeUI 62 | You can customize **ZGRatingView** from Code as following : 63 | 64 | ```swift 65 | 66 | ratingView.setupRatingView(animationTime: 1.0, 67 | isProgressStyleGradient: false, 68 | progressTint: UIColor.Blue, 69 | startProgressTint: nil, 70 | endProgressTint: nil, 71 | starsImage: nil, 72 | barsSpacing: 2, 73 | barWidth: 3) 74 | ```` 75 | or from Storyboard as following : 76 | 77 | 78 | 79 | ## Author 80 | 81 | Zyad Galal, dev_zyad_galal@yahoo.com 82 | 83 | ## License 84 | 85 | ZGRatingView is available under the MIT license. See the `LICENSE` file for more info. 86 | 87 | ## Credits 88 | 89 | You can find me on Twitter [@ZyadMGalal](https://twitter.com/ZyadMGalal). 90 |
91 | You can find me on LinkedIn [@zyad-galal](https://www.linkedin.com/in/zyad-galal/). 92 | 93 | -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "baseline_star_black_18dp.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "baseline_star_black_18dp-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp-1.png -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/example/Pods/ZGRatingView/ZGRatingView/Assets/Assets.xcassets/baseline_star_black_18dp.imageset/baseline_star_black_18dp.png -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Classes/Extension/UIImageExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageExtension.swift 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/7/20. 6 | // Copyright © 2020 macOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | extension UIImage { 13 | static func gradientImage(with bounds: CGRect,colors: [CGColor]) -> UIImage? { 14 | 15 | let gradientLayer = CAGradientLayer() 16 | gradientLayer.frame = bounds 17 | gradientLayer.colors = colors 18 | // This makes it horizontal 19 | gradientLayer.startPoint = CGPoint(x: 0.0, 20 | y: 0.5) 21 | gradientLayer.endPoint = CGPoint(x: 1.0, 22 | y: 0.5) 23 | 24 | UIGraphicsBeginImageContext(gradientLayer.bounds.size) 25 | gradientLayer.render(in: UIGraphicsGetCurrentContext()!) 26 | guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return nil } 27 | UIGraphicsEndImageContext() 28 | return image 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Classes/Extension/UIViewExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewExtension.swift 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/6/20. 6 | // Copyright © 2020 macOS. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIView { 12 | /** Loads instance from nib with the same name. */ 13 | func loadNib() -> UIView { 14 | let bundle = Bundle(for: type(of: self)) 15 | let nibName = type(of: self).description().components(separatedBy: ".").last! 16 | let nib = UINib(nibName: nibName, bundle: bundle) 17 | return nib.instantiate(withOwner: self, options: nil).first as! UIView 18 | } 19 | 20 | func xibSetup() { 21 | backgroundColor = UIColor.white 22 | // use bounds not frame or it'll be offset 23 | self.frame = bounds 24 | // Adding custom subview on top of our view 25 | addSubview(self) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Classes/ProgressBarColorStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressBarColorStyle.swift 3 | // ZGRatingView 4 | // 5 | // Created by Zyad Galal on 4/7/20. 6 | // Copyright © 2020 macOS. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | enum ProgressBarColorStyle { 13 | case solid,gradient 14 | } 15 | -------------------------------------------------------------------------------- /example/Pods/ZGRatingView/ZGRatingView/Classes/ZGRatingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ZGRatingView.swift 3 | // ZGRatingView 4 | // 5 | // Created by ZyadGalal on 11/14/19. 6 | // Copyright © 2019 ZyadGalal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @IBDesignable 12 | final public class ZGRatingView: UIView { 13 | //IBOutlet Collection 14 | @IBOutlet private (set) var starsImageView: [UIImageView]! 15 | @IBOutlet private (set) var progressBarWidthConstraints: [NSLayoutConstraint]! 16 | 17 | //IBOutlet 18 | @IBOutlet private (set) weak var barContainerStackView: UIStackView! 19 | 20 | //IBOutlet 21 | @IBOutlet private (set) weak var containerView: UIView! 22 | @IBOutlet private (set) weak var currentAverageLabel: UILabel! 23 | @IBOutlet private (set) weak var totalAverageLabel: UILabel! 24 | @IBOutlet private (set) weak var fiveRatingProgressView: UIProgressView! 25 | @IBOutlet private (set) weak var fourRatingProgressView: UIProgressView! 26 | @IBOutlet private (set) weak var threeRatingProgressView: UIProgressView! 27 | @IBOutlet private (set) weak var twoRatingProgressView: UIProgressView! 28 | @IBOutlet private (set) weak var oneRatingProgressView: UIProgressView! 29 | @IBOutlet private (set) weak var totalRatingLabel: UILabel! 30 | 31 | //MARK :- Private Inspectable 32 | @IBInspectable private (set) var animationTime: CGFloat = 1.0 33 | @IBInspectable private (set) var isGradient: Bool = false { 34 | didSet { 35 | progressStyle = isGradient == false ? .solid : .gradient 36 | setProgressTintColor() 37 | } 38 | } 39 | @IBInspectable private (set) var progressTint: UIColor = UIColor.darkGray { 40 | didSet { 41 | setProgressTintColor() 42 | } 43 | } 44 | @IBInspectable private (set) var startProgressTint: UIColor = UIColor.darkGray { 45 | didSet { 46 | setProgressTintColor() 47 | } 48 | } 49 | @IBInspectable private (set) var endProgressTint: UIColor = UIColor.darkGray { 50 | didSet { 51 | setProgressTintColor() 52 | } 53 | } 54 | @IBInspectable private (set) var starsImage: UIImage?{ 55 | didSet { 56 | for image in starsImageView { 57 | image.image = starsImage 58 | } 59 | } 60 | } 61 | @IBInspectable private (set) var barsSpacing : CGFloat = 1 { 62 | didSet { 63 | barsSpacing = max(1, barsSpacing) 64 | barContainerStackView.spacing = barsSpacing 65 | } 66 | } 67 | 68 | @IBInspectable private (set) var barWidth : CGFloat = 2 { 69 | didSet { 70 | barWidth = max(1, barWidth) 71 | for barWidthConstraint in progressBarWidthConstraints { 72 | barWidthConstraint.constant = barWidth 73 | self.layoutIfNeeded() 74 | } 75 | } 76 | } 77 | 78 | //Private Variables 79 | private var progressStyle: ProgressBarColorStyle = .solid 80 | 81 | override init(frame: CGRect) { 82 | super.init(frame: frame) 83 | 84 | // Setup view from .xib file 85 | containerView = loadNib() 86 | containerView.xibSetup() 87 | } 88 | 89 | required init?(coder aDecoder: NSCoder) { 90 | super.init(coder: aDecoder) 91 | 92 | // Setup view from .xib file 93 | containerView = loadNib() 94 | containerView.xibSetup() 95 | 96 | } 97 | 98 | public func setupRatingView(animationTime: CGFloat?,isProgressStyleGradient: Bool?,progressTint: UIColor?,startProgressTint: UIColor?,endProgressTint: UIColor?,starsImage: UIImage?,barsSpacing: CGFloat?,barWidth: CGFloat?){ 99 | 100 | if let animationTime = animationTime { 101 | self.animationTime = animationTime 102 | } 103 | if let GradientProgressBar = isProgressStyleGradient { 104 | self.isGradient = GradientProgressBar 105 | } 106 | if let progressTint = progressTint { 107 | self.progressTint = progressTint 108 | } 109 | if let startProgressTint = startProgressTint { 110 | self.startProgressTint = startProgressTint 111 | } 112 | if let endProgressTint = endProgressTint { 113 | self.endProgressTint = endProgressTint 114 | } 115 | if let stars = starsImage { 116 | self.starsImage = stars 117 | } 118 | if let barsSpacing = barsSpacing { 119 | self.barsSpacing = barsSpacing 120 | } 121 | if let barWidth = barWidth { 122 | self.barWidth = barWidth 123 | } 124 | } 125 | 126 | public func calculateStarsValues(totalRating: Int,fiveStars: Float,fourStars: Float,threeStars: Float,twoStars: Float,oneStar: Float){ 127 | let totalRating = Float(totalRating) 128 | 129 | if totalRating == (fiveStars + fourStars + threeStars + twoStars + oneStar) { 130 | //calculate average for every progress view 131 | let fiveStarsAverage = fiveStars / totalRating 132 | let fourStarsAverage = fourStars / totalRating 133 | let threeStarsAverage = threeStars / totalRating 134 | let twoStarsAverage = twoStars / totalRating 135 | let oneStarAverage = oneStar / totalRating 136 | let average = ((fiveStars * 5.0) + (fourStars * 4.0) + (threeStars * 3.0) + (twoStars * 2.0) + (oneStar * 1.0)) / totalRating 137 | 138 | //set text to total rating label 139 | self.totalRatingLabel.text = "\(totalRating) Ratings" 140 | //formate average number to frist float digit 141 | let averageFormatter = String(format: "%.1f", average) 142 | self.currentAverageLabel.text = "\(averageFormatter)" 143 | 144 | setValuesForProgressBars(fiveStarsProgress: fiveStarsAverage, fourStarsProgress: fourStarsAverage, threeStarsProgress: threeStarsAverage, twoStarsProgress: twoStarsAverage, oneStarsProgress: oneStarAverage) 145 | 146 | }else{ 147 | fatalError("total rating must be equal to the sum of all stars") 148 | } 149 | } 150 | 151 | //set starts value for every progress view 152 | private func setValuesForProgressBars(fiveStarsProgress: Float,fourStarsProgress: Float,threeStarsProgress: Float,twoStarsProgress: Float,oneStarsProgress: Float){ 153 | UIView.animate(withDuration: TimeInterval(animationTime)) { 154 | self.fiveRatingProgressView.setProgress(fiveStarsProgress, animated: true) 155 | self.fourRatingProgressView.setProgress(fourStarsProgress, animated: true) 156 | self.threeRatingProgressView.setProgress(threeStarsProgress, animated: true) 157 | self.twoRatingProgressView.setProgress(twoStarsProgress, animated: true) 158 | self.oneRatingProgressView.setProgress(oneStarsProgress, animated: true) 159 | } 160 | } 161 | 162 | private func setProgressTintColor(){ 163 | if progressStyle == .solid { 164 | fiveRatingProgressView.tintColor = progressTint 165 | fourRatingProgressView.tintColor = progressTint 166 | threeRatingProgressView.tintColor = progressTint 167 | twoRatingProgressView.tintColor = progressTint 168 | oneRatingProgressView.tintColor = progressTint 169 | } else if progressStyle == .gradient { 170 | guard let gradientImage = UIImage.gradientImage(with: fiveRatingProgressView.frame, colors: [startProgressTint.cgColor , endProgressTint.cgColor]) else{return} 171 | fiveRatingProgressView.progressImage = gradientImage 172 | fourRatingProgressView.progressImage = gradientImage 173 | threeRatingProgressView.progressImage = gradientImage 174 | twoRatingProgressView.progressImage = gradientImage 175 | oneRatingProgressView.progressImage = gradientImage 176 | } 177 | } 178 | } 179 | 180 | 181 | -------------------------------------------------------------------------------- /example/example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 321CBD78243F7961006454FC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321CBD77243F7961006454FC /* AppDelegate.swift */; }; 11 | 321CBD7A243F7961006454FC /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321CBD79243F7961006454FC /* SceneDelegate.swift */; }; 12 | 321CBD7C243F7961006454FC /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321CBD7B243F7961006454FC /* ViewController.swift */; }; 13 | 321CBD7F243F7961006454FC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 321CBD7D243F7961006454FC /* Main.storyboard */; }; 14 | 321CBD81243F7962006454FC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 321CBD80243F7962006454FC /* Assets.xcassets */; }; 15 | 321CBD84243F7962006454FC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 321CBD82243F7962006454FC /* LaunchScreen.storyboard */; }; 16 | 70153887223D566AAA7E701B /* Pods_example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8321D197A3D77173F754FAC5 /* Pods_example.framework */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 0638030B419C23C0CA240C5B /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.release.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.release.xcconfig"; sourceTree = ""; }; 21 | 30578A48A892A33918AFB297 /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.debug.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.debug.xcconfig"; sourceTree = ""; }; 22 | 321CBD74243F7961006454FC /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | 321CBD77243F7961006454FC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 24 | 321CBD79243F7961006454FC /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 25 | 321CBD7B243F7961006454FC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 26 | 321CBD7E243F7961006454FC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 321CBD80243F7962006454FC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | 321CBD83243F7962006454FC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | 321CBD85243F7962006454FC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | 8321D197A3D77173F754FAC5 /* Pods_example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | /* End PBXFileReference section */ 32 | 33 | /* Begin PBXFrameworksBuildPhase section */ 34 | 321CBD71243F7961006454FC /* Frameworks */ = { 35 | isa = PBXFrameworksBuildPhase; 36 | buildActionMask = 2147483647; 37 | files = ( 38 | 70153887223D566AAA7E701B /* Pods_example.framework in Frameworks */, 39 | ); 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXFrameworksBuildPhase section */ 43 | 44 | /* Begin PBXGroup section */ 45 | 321CBD6B243F7961006454FC = { 46 | isa = PBXGroup; 47 | children = ( 48 | 321CBD76243F7961006454FC /* example */, 49 | 321CBD75243F7961006454FC /* Products */, 50 | C9EC6EA01B60B8C53C497FB9 /* Pods */, 51 | C115344FF35FF4203081934F /* Frameworks */, 52 | ); 53 | sourceTree = ""; 54 | }; 55 | 321CBD75243F7961006454FC /* Products */ = { 56 | isa = PBXGroup; 57 | children = ( 58 | 321CBD74243F7961006454FC /* example.app */, 59 | ); 60 | name = Products; 61 | sourceTree = ""; 62 | }; 63 | 321CBD76243F7961006454FC /* example */ = { 64 | isa = PBXGroup; 65 | children = ( 66 | 321CBD77243F7961006454FC /* AppDelegate.swift */, 67 | 321CBD79243F7961006454FC /* SceneDelegate.swift */, 68 | 321CBD7B243F7961006454FC /* ViewController.swift */, 69 | 321CBD7D243F7961006454FC /* Main.storyboard */, 70 | 321CBD80243F7962006454FC /* Assets.xcassets */, 71 | 321CBD82243F7962006454FC /* LaunchScreen.storyboard */, 72 | 321CBD85243F7962006454FC /* Info.plist */, 73 | ); 74 | path = example; 75 | sourceTree = ""; 76 | }; 77 | C115344FF35FF4203081934F /* Frameworks */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 8321D197A3D77173F754FAC5 /* Pods_example.framework */, 81 | ); 82 | name = Frameworks; 83 | sourceTree = ""; 84 | }; 85 | C9EC6EA01B60B8C53C497FB9 /* Pods */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 30578A48A892A33918AFB297 /* Pods-example.debug.xcconfig */, 89 | 0638030B419C23C0CA240C5B /* Pods-example.release.xcconfig */, 90 | ); 91 | name = Pods; 92 | path = Pods; 93 | sourceTree = ""; 94 | }; 95 | /* End PBXGroup section */ 96 | 97 | /* Begin PBXNativeTarget section */ 98 | 321CBD73243F7961006454FC /* example */ = { 99 | isa = PBXNativeTarget; 100 | buildConfigurationList = 321CBD88243F7962006454FC /* Build configuration list for PBXNativeTarget "example" */; 101 | buildPhases = ( 102 | E355D56FD9024074EE72F431 /* [CP] Check Pods Manifest.lock */, 103 | 321CBD70243F7961006454FC /* Sources */, 104 | 321CBD71243F7961006454FC /* Frameworks */, 105 | 321CBD72243F7961006454FC /* Resources */, 106 | 0A1A35FE2A84AA1139E81670 /* [CP] Embed Pods Frameworks */, 107 | ); 108 | buildRules = ( 109 | ); 110 | dependencies = ( 111 | ); 112 | name = example; 113 | productName = example; 114 | productReference = 321CBD74243F7961006454FC /* example.app */; 115 | productType = "com.apple.product-type.application"; 116 | }; 117 | /* End PBXNativeTarget section */ 118 | 119 | /* Begin PBXProject section */ 120 | 321CBD6C243F7961006454FC /* Project object */ = { 121 | isa = PBXProject; 122 | attributes = { 123 | LastSwiftUpdateCheck = 1140; 124 | LastUpgradeCheck = 1140; 125 | ORGANIZATIONNAME = "Zyad Galal"; 126 | TargetAttributes = { 127 | 321CBD73243F7961006454FC = { 128 | CreatedOnToolsVersion = 11.4; 129 | }; 130 | }; 131 | }; 132 | buildConfigurationList = 321CBD6F243F7961006454FC /* Build configuration list for PBXProject "example" */; 133 | compatibilityVersion = "Xcode 9.3"; 134 | developmentRegion = en; 135 | hasScannedForEncodings = 0; 136 | knownRegions = ( 137 | en, 138 | Base, 139 | ); 140 | mainGroup = 321CBD6B243F7961006454FC; 141 | productRefGroup = 321CBD75243F7961006454FC /* Products */; 142 | projectDirPath = ""; 143 | projectRoot = ""; 144 | targets = ( 145 | 321CBD73243F7961006454FC /* example */, 146 | ); 147 | }; 148 | /* End PBXProject section */ 149 | 150 | /* Begin PBXResourcesBuildPhase section */ 151 | 321CBD72243F7961006454FC /* Resources */ = { 152 | isa = PBXResourcesBuildPhase; 153 | buildActionMask = 2147483647; 154 | files = ( 155 | 321CBD84243F7962006454FC /* LaunchScreen.storyboard in Resources */, 156 | 321CBD81243F7962006454FC /* Assets.xcassets in Resources */, 157 | 321CBD7F243F7961006454FC /* Main.storyboard in Resources */, 158 | ); 159 | runOnlyForDeploymentPostprocessing = 0; 160 | }; 161 | /* End PBXResourcesBuildPhase section */ 162 | 163 | /* Begin PBXShellScriptBuildPhase section */ 164 | 0A1A35FE2A84AA1139E81670 /* [CP] Embed Pods Frameworks */ = { 165 | isa = PBXShellScriptBuildPhase; 166 | buildActionMask = 2147483647; 167 | files = ( 168 | ); 169 | inputFileListPaths = ( 170 | "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks-${CONFIGURATION}-input-files.xcfilelist", 171 | ); 172 | name = "[CP] Embed Pods Frameworks"; 173 | outputFileListPaths = ( 174 | "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks-${CONFIGURATION}-output-files.xcfilelist", 175 | ); 176 | runOnlyForDeploymentPostprocessing = 0; 177 | shellPath = /bin/sh; 178 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-frameworks.sh\"\n"; 179 | showEnvVarsInLog = 0; 180 | }; 181 | E355D56FD9024074EE72F431 /* [CP] Check Pods Manifest.lock */ = { 182 | isa = PBXShellScriptBuildPhase; 183 | buildActionMask = 2147483647; 184 | files = ( 185 | ); 186 | inputFileListPaths = ( 187 | ); 188 | inputPaths = ( 189 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 190 | "${PODS_ROOT}/Manifest.lock", 191 | ); 192 | name = "[CP] Check Pods Manifest.lock"; 193 | outputFileListPaths = ( 194 | ); 195 | outputPaths = ( 196 | "$(DERIVED_FILE_DIR)/Pods-example-checkManifestLockResult.txt", 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | shellPath = /bin/sh; 200 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 201 | showEnvVarsInLog = 0; 202 | }; 203 | /* End PBXShellScriptBuildPhase section */ 204 | 205 | /* Begin PBXSourcesBuildPhase section */ 206 | 321CBD70243F7961006454FC /* Sources */ = { 207 | isa = PBXSourcesBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | 321CBD7C243F7961006454FC /* ViewController.swift in Sources */, 211 | 321CBD78243F7961006454FC /* AppDelegate.swift in Sources */, 212 | 321CBD7A243F7961006454FC /* SceneDelegate.swift in Sources */, 213 | ); 214 | runOnlyForDeploymentPostprocessing = 0; 215 | }; 216 | /* End PBXSourcesBuildPhase section */ 217 | 218 | /* Begin PBXVariantGroup section */ 219 | 321CBD7D243F7961006454FC /* Main.storyboard */ = { 220 | isa = PBXVariantGroup; 221 | children = ( 222 | 321CBD7E243F7961006454FC /* Base */, 223 | ); 224 | name = Main.storyboard; 225 | sourceTree = ""; 226 | }; 227 | 321CBD82243F7962006454FC /* LaunchScreen.storyboard */ = { 228 | isa = PBXVariantGroup; 229 | children = ( 230 | 321CBD83243F7962006454FC /* Base */, 231 | ); 232 | name = LaunchScreen.storyboard; 233 | sourceTree = ""; 234 | }; 235 | /* End PBXVariantGroup section */ 236 | 237 | /* Begin XCBuildConfiguration section */ 238 | 321CBD86243F7962006454FC /* Debug */ = { 239 | isa = XCBuildConfiguration; 240 | buildSettings = { 241 | ALWAYS_SEARCH_USER_PATHS = NO; 242 | CLANG_ANALYZER_NONNULL = YES; 243 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 244 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 245 | CLANG_CXX_LIBRARY = "libc++"; 246 | CLANG_ENABLE_MODULES = YES; 247 | CLANG_ENABLE_OBJC_ARC = YES; 248 | CLANG_ENABLE_OBJC_WEAK = YES; 249 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 250 | CLANG_WARN_BOOL_CONVERSION = YES; 251 | CLANG_WARN_COMMA = YES; 252 | CLANG_WARN_CONSTANT_CONVERSION = YES; 253 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 254 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 255 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 256 | CLANG_WARN_EMPTY_BODY = YES; 257 | CLANG_WARN_ENUM_CONVERSION = YES; 258 | CLANG_WARN_INFINITE_RECURSION = YES; 259 | CLANG_WARN_INT_CONVERSION = YES; 260 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 261 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 262 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 263 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 264 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 265 | CLANG_WARN_STRICT_PROTOTYPES = YES; 266 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 267 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 268 | CLANG_WARN_UNREACHABLE_CODE = YES; 269 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 270 | COPY_PHASE_STRIP = NO; 271 | DEBUG_INFORMATION_FORMAT = dwarf; 272 | ENABLE_STRICT_OBJC_MSGSEND = YES; 273 | ENABLE_TESTABILITY = YES; 274 | GCC_C_LANGUAGE_STANDARD = gnu11; 275 | GCC_DYNAMIC_NO_PIC = NO; 276 | GCC_NO_COMMON_BLOCKS = YES; 277 | GCC_OPTIMIZATION_LEVEL = 0; 278 | GCC_PREPROCESSOR_DEFINITIONS = ( 279 | "DEBUG=1", 280 | "$(inherited)", 281 | ); 282 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 283 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 284 | GCC_WARN_UNDECLARED_SELECTOR = YES; 285 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 286 | GCC_WARN_UNUSED_FUNCTION = YES; 287 | GCC_WARN_UNUSED_VARIABLE = YES; 288 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 289 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 290 | MTL_FAST_MATH = YES; 291 | ONLY_ACTIVE_ARCH = YES; 292 | SDKROOT = iphoneos; 293 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 294 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 295 | }; 296 | name = Debug; 297 | }; 298 | 321CBD87243F7962006454FC /* Release */ = { 299 | isa = XCBuildConfiguration; 300 | buildSettings = { 301 | ALWAYS_SEARCH_USER_PATHS = NO; 302 | CLANG_ANALYZER_NONNULL = YES; 303 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 304 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 305 | CLANG_CXX_LIBRARY = "libc++"; 306 | CLANG_ENABLE_MODULES = YES; 307 | CLANG_ENABLE_OBJC_ARC = YES; 308 | CLANG_ENABLE_OBJC_WEAK = YES; 309 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 310 | CLANG_WARN_BOOL_CONVERSION = YES; 311 | CLANG_WARN_COMMA = YES; 312 | CLANG_WARN_CONSTANT_CONVERSION = YES; 313 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 314 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 315 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 316 | CLANG_WARN_EMPTY_BODY = YES; 317 | CLANG_WARN_ENUM_CONVERSION = YES; 318 | CLANG_WARN_INFINITE_RECURSION = YES; 319 | CLANG_WARN_INT_CONVERSION = YES; 320 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 321 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 322 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 323 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 324 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 325 | CLANG_WARN_STRICT_PROTOTYPES = YES; 326 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 327 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 328 | CLANG_WARN_UNREACHABLE_CODE = YES; 329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 330 | COPY_PHASE_STRIP = NO; 331 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 332 | ENABLE_NS_ASSERTIONS = NO; 333 | ENABLE_STRICT_OBJC_MSGSEND = YES; 334 | GCC_C_LANGUAGE_STANDARD = gnu11; 335 | GCC_NO_COMMON_BLOCKS = YES; 336 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 337 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 338 | GCC_WARN_UNDECLARED_SELECTOR = YES; 339 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 340 | GCC_WARN_UNUSED_FUNCTION = YES; 341 | GCC_WARN_UNUSED_VARIABLE = YES; 342 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 343 | MTL_ENABLE_DEBUG_INFO = NO; 344 | MTL_FAST_MATH = YES; 345 | SDKROOT = iphoneos; 346 | SWIFT_COMPILATION_MODE = wholemodule; 347 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 348 | VALIDATE_PRODUCT = YES; 349 | }; 350 | name = Release; 351 | }; 352 | 321CBD89243F7962006454FC /* Debug */ = { 353 | isa = XCBuildConfiguration; 354 | baseConfigurationReference = 30578A48A892A33918AFB297 /* Pods-example.debug.xcconfig */; 355 | buildSettings = { 356 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 357 | CODE_SIGN_STYLE = Automatic; 358 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 359 | INFOPLIST_FILE = example/Info.plist; 360 | LD_RUNPATH_SEARCH_PATHS = ( 361 | "$(inherited)", 362 | "@executable_path/Frameworks", 363 | ); 364 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.example; 365 | PRODUCT_NAME = "$(TARGET_NAME)"; 366 | SWIFT_VERSION = 5.0; 367 | TARGETED_DEVICE_FAMILY = "1,2"; 368 | }; 369 | name = Debug; 370 | }; 371 | 321CBD8A243F7962006454FC /* Release */ = { 372 | isa = XCBuildConfiguration; 373 | baseConfigurationReference = 0638030B419C23C0CA240C5B /* Pods-example.release.xcconfig */; 374 | buildSettings = { 375 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 376 | CODE_SIGN_STYLE = Automatic; 377 | DEVELOPMENT_TEAM = MLXYZ7TJ5Q; 378 | INFOPLIST_FILE = example/Info.plist; 379 | LD_RUNPATH_SEARCH_PATHS = ( 380 | "$(inherited)", 381 | "@executable_path/Frameworks", 382 | ); 383 | PRODUCT_BUNDLE_IDENTIFIER = ZyadGalal.example; 384 | PRODUCT_NAME = "$(TARGET_NAME)"; 385 | SWIFT_VERSION = 5.0; 386 | TARGETED_DEVICE_FAMILY = "1,2"; 387 | }; 388 | name = Release; 389 | }; 390 | /* End XCBuildConfiguration section */ 391 | 392 | /* Begin XCConfigurationList section */ 393 | 321CBD6F243F7961006454FC /* Build configuration list for PBXProject "example" */ = { 394 | isa = XCConfigurationList; 395 | buildConfigurations = ( 396 | 321CBD86243F7962006454FC /* Debug */, 397 | 321CBD87243F7962006454FC /* Release */, 398 | ); 399 | defaultConfigurationIsVisible = 0; 400 | defaultConfigurationName = Release; 401 | }; 402 | 321CBD88243F7962006454FC /* Build configuration list for PBXNativeTarget "example" */ = { 403 | isa = XCConfigurationList; 404 | buildConfigurations = ( 405 | 321CBD89243F7962006454FC /* Debug */, 406 | 321CBD8A243F7962006454FC /* Release */, 407 | ); 408 | defaultConfigurationIsVisible = 0; 409 | defaultConfigurationName = Release; 410 | }; 411 | /* End XCConfigurationList section */ 412 | }; 413 | rootObject = 321CBD6C243F7961006454FC /* Project object */; 414 | } 415 | -------------------------------------------------------------------------------- /example/example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example.xcodeproj/xcuserdata/zyadgalal.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | example.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 2 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /example/example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /example/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // example 4 | // 5 | // Created by Zyad Galal on 4/9/20. 6 | // Copyright © 2020 Zyad Galal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | return true 19 | } 20 | 21 | // MARK: UISceneSession Lifecycle 22 | 23 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 24 | // Called when a new scene session is being created. 25 | // Use this method to select a configuration to create the new scene with. 26 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 27 | } 28 | 29 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 30 | // Called when the user discards a scene session. 31 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 32 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 33 | } 34 | 35 | 36 | } 37 | 38 | -------------------------------------------------------------------------------- /example/example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /example/example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/example/Assets.xcassets/star_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "star_icon.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "star_icon@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "star_icon@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/example/Assets.xcassets/star_icon.imageset/star_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/example/example/Assets.xcassets/star_icon.imageset/star_icon.png -------------------------------------------------------------------------------- /example/example/Assets.xcassets/star_icon.imageset/star_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/example/example/Assets.xcassets/star_icon.imageset/star_icon@2x.png -------------------------------------------------------------------------------- /example/example/Assets.xcassets/star_icon.imageset/star_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZyadGalal/ZGRatingView/218396ba939986d3fb355a00a42436b0efcaf73d/example/example/Assets.xcassets/star_icon.imageset/star_icon@3x.png -------------------------------------------------------------------------------- /example/example/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /example/example/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /example/example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIMainStoryboardFile 45 | Main 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UISupportedInterfaceOrientations 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | UISupportedInterfaceOrientations~ipad 57 | 58 | UIInterfaceOrientationPortrait 59 | UIInterfaceOrientationPortraitUpsideDown 60 | UIInterfaceOrientationLandscapeLeft 61 | UIInterfaceOrientationLandscapeRight 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /example/example/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // example 4 | // 5 | // Created by Zyad Galal on 4/9/20. 6 | // Copyright © 2020 Zyad Galal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | 16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 19 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 20 | guard let _ = (scene as? UIWindowScene) else { return } 21 | } 22 | 23 | func sceneDidDisconnect(_ scene: UIScene) { 24 | // Called as the scene is being released by the system. 25 | // This occurs shortly after the scene enters the background, or when its session is discarded. 26 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 27 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). 28 | } 29 | 30 | func sceneDidBecomeActive(_ scene: UIScene) { 31 | // Called when the scene has moved from an inactive state to an active state. 32 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 33 | } 34 | 35 | func sceneWillResignActive(_ scene: UIScene) { 36 | // Called when the scene will move from an active state to an inactive state. 37 | // This may occur due to temporary interruptions (ex. an incoming phone call). 38 | } 39 | 40 | func sceneWillEnterForeground(_ scene: UIScene) { 41 | // Called as the scene transitions from the background to the foreground. 42 | // Use this method to undo the changes made on entering the background. 43 | } 44 | 45 | func sceneDidEnterBackground(_ scene: UIScene) { 46 | // Called as the scene transitions from the foreground to the background. 47 | // Use this method to save data, release shared resources, and store enough scene-specific state information 48 | // to restore the scene back to its current state. 49 | } 50 | 51 | 52 | } 53 | 54 | -------------------------------------------------------------------------------- /example/example/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // example 4 | // 5 | // Created by Zyad Galal on 4/9/20. 6 | // Copyright © 2020 Zyad Galal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ZGRatingView 11 | class ViewController: UIViewController { 12 | 13 | @IBOutlet weak var ratingView: ZGRatingView! 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | 17 | ratingView.calculateStarsValues(totalRating: 5, fiveStars: 2, fourStars: 2, threeStars: 0, twoStars: 0, oneStar:1) 18 | } 19 | 20 | 21 | } 22 | 23 | --------------------------------------------------------------------------------