Sticker-Image is the demo-example of how to use sticekrs. It help you to adding stickr on UIImageview
and UIView
. It is very easy to implement in the existing project OR new project. Please find below the step of implemenation.
- iOS 10.0+
- Xcode 10
Just add the StickerView
file to your project.
or use CocoaPods with Podfile:
pod 'StickerView'
- If you are using pod then you need to import file.
import StickerView
- Declare variable using below code.
private var _selectedStickerView:StickerView?
var selectedStickerView:StickerView? {
get {
return _selectedStickerView
}
set {
// if other sticker choosed then resign the handler
if _selectedStickerView != newValue {
if let selectedStickerView = _selectedStickerView {
selectedStickerView.showEditingHandlers = false
}
_selectedStickerView = newValue
}
// assign handler to new sticker added
if let selectedStickerView = _selectedStickerView {
selectedStickerView.showEditingHandlers = true
selectedStickerView.superview?.bringSubviewToFront(selectedStickerView)
}
}
}
- Adding sticker on the View. Here I add sticker on the
UIImageview
.
let testImage = UIImageView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 100))
testImage.image = imageSticker
testImage.contentMode = .scaleAspectFit
let stickerView3 = StickerView.init(contentView: testImage)
stickerView3.center = CGPoint.init(x: 150, y: 150)
stickerView3.delegate = self
stickerView3.setImage(UIImage.init(named: "Close")!, forHandler: StickerViewHandler.close)
stickerView3.setImage(UIImage.init(named: "Rotate")!, forHandler: StickerViewHandler.rotate)
stickerView3.setImage(UIImage.init(named: "Flip")!, forHandler: StickerViewHandler.flip)
stickerView3.showEditingHandlers = false
stickerView3.tag = 999
self.imgSource.addSubview(stickerView3)
self.selectedStickerView = stickerView3
- Implement delegate methods
extension ViewController : StickerViewDelegate {
func stickerViewDidTap(_ stickerView: StickerView) {
self.selectedStickerView = stickerView
}
func stickerViewDidBeginMoving(_ stickerView: StickerView) {
self.selectedStickerView = stickerView
}
/// Other delegate methods which we not used currently but choose method according to your event and requirements.
func stickerViewDidChangeMoving(_ stickerView: StickerView) {
}
func stickerViewDidEndMoving(_ stickerView: StickerView) {
}
func stickerViewDidBeginRotating(_ stickerView: StickerView) {
}
func stickerViewDidChangeRotating(_ stickerView: StickerView) {
}
func stickerViewDidEndRotating(_ stickerView: StickerView) {
}
func stickerViewDidClose(_ stickerView: StickerView) {
}
}
- For Save Image to the gallery.
we need to add permission first in the info.plist
file.
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Please allow access to save photo in your photo library</string>
@IBAction func btnSaveClick (sender:AnyObject) {
selectedStickerView?.showEditingHandlers = false
// CHECK HERE FIRST STICKER ADDED OR NOT?
if self.imgSource.subviews.filter({$0.tag == 999}).count > 0 {
if let image = mergeImages(imageView: imgSource){
UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}else{
print("Image not found !!")
}
}else{
print("No Sticker is available.")
//UIAlertController.showAlertWithOkButton(self, aStrMessage: "No Sticker is available.", completion: nil)
}
}
//MARK: - Add image to Library
@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
if let error = error {
// we got back an error!
print("Save error")
//UIAlertController.showAlertWithOkButton(self, aStrMessage: "Save error", completion: nil)
} else {
print("Your image has been saved to your photos.")
//UIAlertController.showAlertWithOkButton(self, aStrMessage: "Your image has been saved to your photos.", completion: nil)
}
}
- If you need help or you'd like to ask a general question, open an issue.
- If you found a bug, open an issue.
- If you have a feature request, open an issue.
- If you want to contribute, submit a pull request.
Sticker-Image is released under the MIT license. See LICENSE for details.