[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7016":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":20,"defaultBranch":21,"hasWiki":19,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":16,"starSnapshotCount":16,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},7016,"EasyTipView","teodorpatras\u002FEasyTipView","teodorpatras","Fully customisable tooltip view in Swift for iOS.","",null,"Swift",3082,526,1,17,0,60.17,"MIT License",true,false,"master",[],"2026-06-12 04:00:31","\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fteodorpatras\u002FEasyTipView\u002Fmaster\u002Fassets\u002Feasytipview.png\" alt=\"EasyTipView: fully customisable tooltip view written in Swift\" style=\"width: 500px;\"\u002F>\n\n![Swift3](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-5.0-orange.svg?style=flat\")\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fp\u002FEasyTipView.svg?style=flat)](http:\u002F\u002Fcocoapods.org\u002Fpods\u002FEasyTipView)\n[![Build Status](https:\u002F\u002Ftravis-ci.org\u002Fteodorpatras\u002FEasyTipView.svg)](https:\u002F\u002Ftravis-ci.org\u002Fteodorpatras\u002FEasyTipView)\n[![Version](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FEasyTipView.svg?style=flat)](http:\u002F\u002Fcocoapods.org\u002Fpods\u002FEasyTipView)\n[![Carthage Compatible](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-4BC51D.svg?style=flat)](https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fl\u002FEasyTipView.svg?style=flat)](http:\u002F\u002Fcocoapods.org\u002Fpods\u002FEasyTipView)\n\nDescription\n--------------\n\n```EasyTipView``` is a fully customizable tooltip view written in Swift that can be used as a call to action or informative tip.\n\n|\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fteodorpatras\u002FEasyTipView\u002Fmaster\u002Fassets\u002Feasytipview.gif\" width=\"320\">|\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fteodorpatras\u002FEasyTipView\u002Fmaster\u002Fassets\u002Fstatic.png\" width=\"320\">|\n|----------|-------------|\n\n# Contents\n1. [Features](#features)\n3. [Installation](#installation)\n4. [Supported OS & SDK versions](#supported-versions)\n5. [Usage](#usage)\n6. [Customizing the appearance](#customising)\n7. [Customising the presentation and dismissal animations](#customising-animations)\n8. [License](#license)\n9. [Contact](#contact)\n\n\u003Ca name=\"features\"> Features \u003C\u002Fa>\n--------------\n\n- [x] Can be shown pointing to any ``UIBarItem`` or ``UIView`` subclass.\n- [x] Support for any arrow direction `←, →, ↑, ↓`\n- [x] Automatic orientation change adjustments.\n- [x] Fully customizable appearance (custom content view or simply just text - including `NSAttributedString` - see the Example app).\n- [x] Fully customizable presentation and dismissal animations.\n\n\n\u003Ca name=\"installation\"> Installation \u003C\u002Fa>\n--------------\n\n### CocoaPods\n\n[CocoaPods](http:\u002F\u002Fcocoapods.org) is a dependency manager for Cocoa projects.\n\nCocoaPods 0.36 adds supports for Swift and embedded frameworks. You can install it with the following command:\n\n```bash\n$ gem install cocoapods\n```\n\nTo integrate EasyTipView into your Xcode project using CocoaPods, specify it in your `Podfile`:\n\n\n```ruby\npod 'EasyTipView', '~> 2.1'\n```\n\nThen, run the following command:\n\n```bash\n$ pod install\n```\n\nIn case Xcode complains (\u003Ci>\"Cannot load underlying module for EasyTipView\"\u003C\u002Fi>) go to Product and choose Clean (or simply press \u003Ckbd>⇧\u003C\u002Fkbd>\u003Ckbd>⌘\u003C\u002Fkbd>\u003Ckbd>K\u003C\u002Fkbd>).\n\n\n### Carthage\n\n[Carthage](https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.\n\nYou can install Carthage with [Homebrew](http:\u002F\u002Fbrew.sh\u002F) using the following command:\n\n```bash\n$ brew update\n$ brew install carthage\n```\n\nTo integrate EasyTipView into your Xcode project using Carthage, specify it in your `Cartfile`:\n\n```ogdl\ngithub \"teodorpatras\u002FEasyTipView\"\n```\n\nRun `carthage update` to build the framework and drag the built `EasyTipView.framework` into your Xcode project.\n\n### Manually\n\nIf you prefer not to use either of the aforementioned dependency managers, you can integrate EasyTipView into your project manually.\n\n\u003Ca name=\"supported-versions\"> Supported OS & SDK Versions \u003C\u002Fa>\n-----------------------------\n\n* Supported build target - iOS 8+ (Xcode 8)\n\n\u003Ca name=\"usage\"> Usage \u003C\u002Fa>\n--------------\n\n1) First you should customize the preferences:\n```swift\n\nvar preferences = EasyTipView.Preferences()\npreferences.drawing.font = UIFont(name: \"Futura-Medium\", size: 13)!\npreferences.drawing.foregroundColor = UIColor.whiteColor()\npreferences.drawing.backgroundColor = UIColor(hue:0.46, saturation:0.99, brightness:0.6, alpha:1)\npreferences.drawing.arrowPosition = EasyTipView.ArrowPosition.top\n\n\u002F*\n * Optionally you can make these preferences global for all future EasyTipViews\n *\u002F\nEasyTipView.globalPreferences = preferences\n\n```\n\n2) Secondly call the ``show(animated: forView: withinSuperview: text: preferences: delegate:)`` method:\n```swift\nEasyTipView.show(forView: self.buttonB,\nwithinSuperview: self.navigationController?.view,\ntext: \"Tip view inside the navigation controller's view. Tap to dismiss!\",\npreferences: preferences,\ndelegate: self)\n```\n\n**Note that if you set the** ```EasyTipView.globalPreferences```**, you can ommit the** ```preferences``` **parameter in all calls. Additionally, you can also ommit the** ``withinSuperview`` **parameter and the** ``EasyTipView`` **will be shown within the main application window**.\n\n*Alternatively, if you want to dismiss the ``EasyTipView`` programmatically later on, you can use one of the instance methods:*\n\n```swift\n\nlet tipView = EasyTipView(text: \"Some text\", preferences: preferences)\ntipView.show(forView: someView, withinSuperview: someSuperview)\n\n\u002F\u002F later on you can dismiss it\ntipView.dismiss()\n```\n\u003Ca name=\"customising\"> Customizing the appearance \u003C\u002Fa>\n--------------\nIn order to customize the `EasyTipView` appearance and behavior, you can play with the `Preferences` structure which encapsulates all the customizable properties of the ``EasyTipView``. These preferences have been split into three structures:\n* ```Drawing``` - encapsulates customizable properties specifying how ```EastTipView``` will be drawn on screen.\n* ```Positioning``` - encapsulates customizable properties specifying where ```EasyTipView``` will be drawn within its own bounds.\n* ```Animating``` - encapsulates customizable properties specifying how ```EasyTipView``` will animate on and off screen.\n\n| `Drawing ` attribute   |      Description      |\n|----------|-------------|\n|`cornerRadius`| The corner radius of the tip view bubble.|\n|`arrowHeight`| The height of the arrow positioned at the top or bottom of the bubble.|\n|`arrowWidth`| The width of the above mentioned arrow.|\n|`foregroundColor`| The text color.|\n|`backgroundColor`| The background color of the bubble.|\n|`arrowPosition`| The position of the arrow. This can be: \u003Cbr \u002F> **+** `.top`: on top of the bubble \u003Cbr \u002F> **+** `.bottom`: at the bottom of the bubble.\u003Cbr \u002F> **+** `.left`: on the left of the bubble \u003Cbr \u002F> **+** `.right`: on the right of the bubble \u003Cbr \u002F> **+** `.any`: use this option to let the `EasyTipView` automatically find the best arrow position. \u003Cbr \u002F>**If the passed in arrow cannot be applied due to layout restrictions, a different arrow position will be automatically assigned.**|\n|`textAlignment`| The alignment of the text.|\n|`borderWidth`| Width of the optional border to be applied on the bubble.|\n|`borderColor`| Color of the optional border to be applied on the bubble. **In order for the border to be applied, `borderColor` needs to be different that `UIColor.clear` and `borderWidth` > 0**|\n|`font`| Font to be applied on the text. |\n|`shadowColor`| The color of the shadow (default `UIColor.clearcolor`).|\n|`shadowOpacity`| The opacity of the shadow (default `0`). **For the shadow to be drawn, both** `shadowColor` **and** `shadowOpacity` **must be set to a valid value.**|\n|`shadowRadius`| The radius of the shadow (default `0`).|\n|`shadowOffset` | The offset of the shadow. |\n\n| `Positioning ` attribute   |      Description      |\n|----------|-------------|\n|`bubbleHInset`| Horizontal bubble inset within its container.|\n|`bubbleVInset`| Vertical bubble inset within its container.|\n|`contentHInset`| Content horizontal inset within the bubble.|\n|`contentVInset`| Content vertical inset within the bubble.|\n|`maxWidth`| Max bubble width.|\n\n| `Animating ` attribute   |      Description      |\n|----------|-------------|\n|`dismissTransform`| `CGAffineTransform` specifying how the bubble will be dismissed. |\n|`showInitialTransform`| `CGAffineTransform` specifying the initial transform to be applied on the bubble before it is animated on screen. |\n|`showFinalTransform`| `CGAffineTransform` specifying how the bubble will be animated on screen. |\n|`springDamping`| Spring animation damping.|\n|`springVelocity`| Spring animation velocity.|\n|`showInitialAlpha`|Initial alpha to be applied on the tip view before it is animated on screen.|\n|`dismissFinalAlpha`|The alpha to be applied on the tip view when it is animating off screen.|\n|`showDuration`|Show animation duration.|\n|`dismissDuration`|Dismiss animation duration.|\n|`dismissOnTap`|Prevents view from dismissing on tap if it is set to false. (Default value is true.)|\n\n\u003Ca name=\"customising-animations\"> Customising the presentation or dismissal animations \u003C\u002Fa>\n--------------\n\nThe default animations for showing or dismissing are scale up and down. If you want to change the default behavior, you need to change the attributes of the ``animating`` property within the preferences. An example could be:\n\n```swift\npreferences.animating.dismissTransform = CGAffineTransform(translationX: 0, y: -15)\npreferences.animating.showInitialTransform = CGAffineTransform(translationX: 0, y: -15)\npreferences.animating.showInitialAlpha = 0\npreferences.animating.showDuration = 1.5\npreferences.animating.dismissDuration = 1.5\n```\n\nThis produces the following animations:\n\u003Cbr>\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fteodorpatras\u002FEasyTipView\u002Fmaster\u002Fassets\u002Fanimation.gif\" width=\"200\">\n\nFor more animations, checkout the example project.\n*Once you configured the animations, a good idea would be to __make these preferences global__, for all future instances of `EasyTipView` by assigning it to ```EasyTipView.globalPreferences```.*\n\n\n\u003Ca name=\"license\"> License \u003C\u002Fa>\n--------------\n\n```EasyTipView``` is developed by [Teodor Patraş](https:\u002F\u002Fwww.teodorpatras.com) and is released under the MIT license. See the ```LICENSE``` file for details.\n\nLogo was created using Bud Icons Launch graphic by [Budi Tanrim](http:\u002F\u002Fbuditanrim.co) from [FlatIcon](http:\u002F\u002Fwww.flaticon.com\u002F) which is licensed under [Creative Commons BY 3.0](http:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby\u002F3.0\u002F). Made with [Logo Maker](http:\u002F\u002Flogomakr.com).\n\n\u003Ca name=\"contact\"> Contact \u003C\u002Fa>\n--------------\n\nYou can follow or drop me a line on [my Twitter account](https:\u002F\u002Ftwitter.com\u002Fteodorpatras). If you find any issues on the project, you can open a ticket. Pull requests are also welcome.\n","EasyTipView 是一个用 Swift 编写的完全可定制的提示框视图，适用于 iOS 应用。它支持指向任意 `UIBarItem` 或 `UIView` 子类，并提供多种箭头方向（左、右、上、下）。该库具有自动适应屏幕旋转的功能，并允许开发者自定义外观和动画效果，包括使用自定义内容视图或纯文本（含 `NSAttributedString`）。适用于需要向用户展示操作指引或信息提示的应用场景中，如新功能介绍、表单填写指导等。通过 CocoaPods 或 Carthage 可以轻松集成到项目中。",2,"2026-06-11 03:10:07","top_language"]