[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7079":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":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":17,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":16,"starSnapshotCount":16,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},7079,"SKPhotoBrowser","suzuki-0000\u002FSKPhotoBrowser","suzuki-0000","Simple PhotoBrowser\u002FViewer inspired by facebook, twitter photo browsers written by swift","",null,"Swift",2739,554,43,6,0,1,5,61.23,"MIT License",false,"master",true,[25,26,27],"photo-browser","photos","swift","2026-06-12 04:00:32","\u003Ch1 align=\"center\">SKPhotoBrowser\u003C\u002Fh1>\n\n\u003CH4 align=\"center\">\nSimple PhotoBrowser\u002FViewer inspired by facebook, twitter photo browsers written by swift\n\u003C\u002FH4>\n\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fswift\">\n\u003Cimg alt=\"Swift5\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-swift5.4-orange.svg?style=flat\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"http:\u002F\u002Fcocoadocs.org\u002Fdocsets\u002FSKPhotoBrowser\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FSKPhotoBrowser.svg?style=flat\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage\">\n\u003Cimg alt=\"Build Status\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-4BC51D.svg?style=flat\" \u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fswift\u002F\">\n\u003Cimg alt=\"Platform\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-iOS-green.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"\">\n\u003Cimg alt=\"Contributors\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fall_contributors-66-orange.svg?style=flat-square\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\n## features\n- Display one or more images by providing either `UIImage` objects, or string of URL array.\n- Photos can be zoomed and panned, and optional captions can be displayed\n- Minimalistic Facebook-like interface, swipe up\u002Fdown to dismiss\n- Ability to custom control. (hide\u002F show toolbar for controls, \u002F swipe control)\n- Handling and caching photos from web\n- Landscape handling\n- Delete photo support(by offbye). By set displayDelete=true show a delete icon in statusbar, deleted indexes can be obtain from delegate func didDeleted\n\n| Table\u002FCollectionView sample | Button tap sample | gif sample |\n| ------------- | --------------- | --------------|\n| ![sample](Screenshots\u002Fexample01.gif) | ![sample](Screenshots\u002Fexample02.gif) | ![sample](Screenshots\u002Fexample03.gif)\n\n## Requirements\n        - iOS 9.0+\n        - Swift 2.0+\n        - ARC\n\n### Version vs Swift version.\n\n        Below is a table that shows which version of SKPhotoBrowser you should use for your Swift version.\n\n| Swift version | SKPhotoBrowser version |\n| ------------- | ---------------|\n| 5.0           | >= 6.1.0 |\n| 4.2           | >= 6.0.0 |\n| 4.1           | >= 5.0.0 |\n| 3.2           | >= 4.0.0 |\n| 2.3           | 2.0.4 - 3.1.4  |\n| 2.2           | \u003C= 2.0.3        |\n\n## Installation\n\n#### CocoaPods\navailable on CocoaPods. Just add the following to your project Podfile:\n```\npod 'SKPhotoBrowser'\nuse_frameworks!\n```\n\n#### Carthage\nTo integrate into your Xcode project using Carthage, specify it in your Cartfile:\n```\ngithub \"suzuki-0000\u002FSKPhotoBrowser\"\n```\n\n#### Info.plist\nIf you want to use share image feature, it includes save image into galery, so you should specify a permission into your Info.plist (if you haven't done it yet).\n```\n\u003Ckey>NSPhotoLibraryAddUsageDescription\u003C\u002Fkey>\n\u003Cstring>Used to save images into your galery\u003C\u002Fstring>\n```\n\n#### Swift Package Manager\nAvailable in Swift Package Manager. Use the repository URL in Xcode\n\n## Usage\nSee the code snippet below for an example of how to implement, or see the example project.\n\nfrom UIImages:\n```swift\n\u002F\u002F 1. create SKPhoto Array from UIImage\nvar images = [SKPhoto]()\nlet photo = SKPhoto.photoWithImage(UIImage())\u002F\u002F add some UIImage\nimages.append(photo)\n\n\u002F\u002F 2. create PhotoBrowser Instance, and present from your viewController.\nlet browser = SKPhotoBrowser(photos: images)\nbrowser.initializePageIndex(0)\npresent(browser, animated: true, completion: {})\n```\n\nfrom URLs:\n```swift\n\u002F\u002F 1. create URL Array\nvar images = [SKPhoto]()\nlet photo = SKPhoto.photoWithImageURL(\"https:\u002F\u002Fplacehold.jp\u002F150x150.png\")\nphoto.shouldCachePhotoURLImage = false \u002F\u002F you can use image cache by true(NSCache)\nimages.append(photo)\n\n\u002F\u002F 2. create PhotoBrowser Instance, and present.\nlet browser = SKPhotoBrowser(photos: images)\nbrowser.initializePageIndex(0)\npresent(browser, animated: true, completion: {})\n```\n\nfrom local files:\n```swift\n\u002F\u002F 1. create images from local files\nvar images = [SKLocalPhoto]()\nlet photo = SKLocalPhoto.photoWithImageURL(\"..some_local_path\u002F150x150.png\")\nimages.append(photo)\n\n\u002F\u002F 2. create PhotoBrowser Instance, and present.\nlet browser = SKPhotoBrowser(photos: images)\nbrowser.initializePageIndex(0)\npresent(browser, animated: true, completion: {})\n```\n\nIf you want to use zooming effect from an existing view, use another initializer:\n```swift\n\u002F\u002F e.g.: some tableView or collectionView.\nfunc collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {\n   let cell = collectionView.cellForItemAtIndexPath(indexPath)\n   let originImage = cell.exampleImageView.image \u002F\u002F some image for baseImage\n\n   let browser = SKPhotoBrowser(originImage: originImage ?? UIImage(), photos: images, animatedFromView: cell)\n   browser.initializePageIndex(indexPath.row)\n   present(browser, animated: true, completion: {})\n}\n```\n\n### Custom\n\n#### Toolbar\nYou can customize Toolbar via SKPhotoBrowserOptions.\n\n```swift\nSKPhotoBrowserOptions.displayToolbar = false                              \u002F\u002F all tool bar will be hidden\nSKPhotoBrowserOptions.displayCounterLabel = false                         \u002F\u002F counter label will be hidden\nSKPhotoBrowserOptions.displayBackAndForwardButton = false                 \u002F\u002F back \u002F forward button will be hidden\nSKPhotoBrowserOptions.displayAction = false                               \u002F\u002F action button will be hidden\nSKPhotoBrowserOptions.displayHorizontalScrollIndicator = false            \u002F\u002F horizontal scroll bar will be hidden\nSKPhotoBrowserOptions.displayVerticalScrollIndicator = false              \u002F\u002F vertical scroll bar will be hidden\nlet browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)\n```\n\n#### Colors\nYou can customize text, icon and background colors via SKPhotoBrowserOptions or SKToolbarOptions\n```swift\nSKPhotoBrowserOptions.backgroundColor = UIColor.whiteColor()               \u002F\u002F browser view will be white\nSKPhotoBrowserOptions.textAndIconColor = UIColor.blackColor()              \u002F\u002F text and icons will be black\nSKToolbarOptions.textShadowColor = UIColor.clearColor()                    \u002F\u002F shadow of toolbar text will be removed\nSKToolbarOptions.font = UIFont(name: \"Futura\", size: 16.0)                 \u002F\u002F font of toolbar will be 'Futura'\n```\n\n#### Images\nYou can customize the padding of displayed images via SKPhotoBrowserOptions\n```swift\nSKPhotoBrowserOptions.imagePaddingX = 50                                   \u002F\u002F image padding left and right will be 25\nSKPhotoBrowserOptions.imagePaddingY = 50                                   \u002F\u002F image padding top and bottom will be 25\n```\n\n#### Statusbar\nYou can customize the visibility of the Statusbar in browser view via SKPhotoBrowserOptions\n```swift\nSKPhotoBrowserOptions.displayStatusbar = false                             \u002F\u002F status bar will be hidden\n```\n\n#### Close And Delete Buttons\nThat how you can customize close and delete buttons\n```swift\nSKPhotoBrowserOptions.displayDeleteButton = true                           \u002F\u002F delete button will be shown\nSKPhotoBrowserOptions.swapCloseAndDeleteButtons = true                     \u002F\u002F now close button located on right side of screen and delete button is on left side\nSKPhotoBrowserOptions.closeAndDeleteButtonPadding = 20                     \u002F\u002F set offset from top and from nearest screen edge of close button and delete button\n```\n\n#### Screenshot Protection\nYou can protect your image from taking screenshot via SKPhotoBrowserOptions\nOnly working on the device, not on simulator\n```swift\nSKPhotoBrowserOptions.protectScreenshot = true                             \u002F\u002F image will be hidden after taking screenshot\n```\n\n#### Custom Cache From Web URL\nYou can use SKCacheable protocol if others are adaptable. (SKImageCacheable or SKRequestResponseCacheable)\n\n```swift\ne.g. SDWebImage\n\n\u002F\u002F 1. create custom cache, implement in accordance with the protocol\nclass CustomImageCache: SKImageCacheable { var cache: SDImageCache }\n\n\u002F\u002F 2. replace SKCache instance with custom cache\nSKCache.sharedCache.imageCache = CustomImageCache()\n```\n\n#### CustomButton Image\nClose, Delete buttons are able to change image and frame.\n```swift\nbrowser.updateCloseButton(UIImage())\nbrowser.updateUpdateButton(UIImage())\n```\n\n#### Delete Photo\nYou can delete your photo for your own handling. detect button tap from `removePhoto` delegate function.\n\n\n#### Photo Captions\nPhoto captions can be displayed simply bottom of PhotoBrowser. by setting the `caption` property on specific photos:\n``` swift\nlet photo = SKPhoto.photoWithImage(UIImage())\nphoto.caption = \"Lorem Ipsum is simply dummy text of the printing and typesetting industry.\"\n```\n\n#### SwipeGesture\nvertical swipe can enable\u002Fdisable:\n``` swift\nSKPhotoBrowserOptions.disableVerticalSwipe = true\n```\n\n#### Delegate\nThere's some trigger point you can handle using delegate. those are optional.\nSee [SKPhotoBrowserDelegate](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fblob\u002Fmaster\u002FSKPhotoBrowser\u002FSKPhotoBrowserDelegate.swift) for more details.\n- didShowPhotoAtIndex(_ index:Int)\n- willDismissAtPageIndex(_ index:Int)\n- willShowActionSheet(_ photoIndex: Int)\n- didDismissAtPageIndex(_ index:Int)\n- didDismissActionSheetWithButtonIndex(_ buttonIndex: Int, photoIndex: Int)\n- didScrollToIndex(_ index: Int)\n- removePhoto(_ browser: SKPhotoBrowser, index: Int, reload: (() -> Void))\n- viewForPhoto(_ browser: SKPhotoBrowser, index: Int) -> UIView?\n- controlsVisibilityToggled(_ browser: SKPhotoBrowser, hidden: Bool)\n\n```swift\nlet browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)\nbrowser.delegate = self\n\n\u002F\u002F MARK: - SKPhotoBrowserDelegate\nfunc didShowPhotoAtIndex(_ index: Int) {\n\u002F\u002F when photo will be shown\n}\n\nfunc willDismissAtPageIndex(_ index: Int) {\n\u002F\u002F when PhotoBrowser will be dismissed\n}\n\nfunc didDismissAtPageIndex(_ index: Int) {\n\u002F\u002F when PhotoBrowser did dismissed\n}\n\n```\n\n#### Options\nYou can access via `SKPhotoBrowserOptions`, which can use for browser control.\nSee [SKPhotoBrowserOptions](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fblob\u002Fmaster\u002FSKPhotoBrowser\u002FSKPhotoBrowserOptions.swift) for more details.\n- single tap handling, dismiss\u002Fnoaction\n- blackArea handling which is appearing outside of photo\n- bounce animation when appearing\u002Fdismissing\n- text color, font, or more\n``` swift\nSKPhotoBrowserOptions.enableZoomBlackArea    = true  \u002F\u002F default true\nSKPhotoBrowserOptions.enableSingleTapDismiss = true  \u002F\u002F default false\n```\n\n## Photos from\n- [Unsplash](https:\u002F\u002Funsplash.com)\n\n## License\navailable under the MIT license. See the LICENSE file for more info.\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key](https:\u002F\u002Fgithub.com\u002Fkentcdodds\u002Fall-contributors#emoji-key)):\n\u003C!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n\u003C!-- prettier-ignore-start -->\n\u003C!-- markdownlint-disable -->\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Ca href=\"https:\u002F\u002Fp36348.github.io\u002F\">\u003Cimg src=\"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6042275?v=4?s=20\" width=\"20px;\" alt=\"\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Oreo Chen\u003C\u002Fb>\u003C\u002Fsub>\u003C\u002Fa>\u003Cbr \u002F>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=p36348\" title=\"Code\">💻\u003C\u002Fa>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C!-- markdownlint-restore -->\n\u003C!-- prettier-ignore-end -->\n\n\u003C!-- ALL-CONTRIBUTORS-LIST:END -->\n\n\u003C!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n\u003C!-- prettier-ignore -->\n| [\u003Cimg src=\"https:\u002F\u002Favatars1.githubusercontent.com\u002Fu\u002F12511909?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Alexander Khitev\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002Falexanderkhitev)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=alexanderkhitev \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F1032307?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>K Rummler\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002Fkrummler)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=krummler \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F198395?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Mads Bjerre\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Fwisekopf.com)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=madsb \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars3.githubusercontent.com\u002Fu\u002F4025839?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Meng Ye\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fjk2K.com)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=jk2K \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F351683?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>_ant_one\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002Fbarrault01)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=barrault01 \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars0.githubusercontent.com\u002Fu\u002F13894518?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Tim Roesner\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Ftimroesner.com)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=timroesner \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars0.githubusercontent.com\u002Fu\u002F1303682?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>胥冥\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Fwww.zxming.com)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=zxming \"Code\") |\n| :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| [\u003Cimg src=\"https:\u002F\u002Favatars3.githubusercontent.com\u002Fu\u002F371957?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Kevin Wolkober\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Fkevinwo.github.io)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=kevinwo \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F110283?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>PJ Gray\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Fwww.saygoodnight.com\u002F)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=pj4533 \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars1.githubusercontent.com\u002Fu\u002F4082752?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>ghysrc\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002Fghysrc)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=ghysrc \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars1.githubusercontent.com\u002Fu\u002F5204614?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Josef Doležal\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Fjosefdolezal.github.com)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=josefdolezal \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars1.githubusercontent.com\u002Fu\u002F189020?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Mark Goody\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fmarramgrass.micro.blog\u002F)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=marramgrass \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F1270537?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Philippe Riegert\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002FPhilippeRiegert)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=PhilippeRiegert \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F399560?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Bryan Irace\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Firace.me)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=irace \"Code\") |\n| [\u003Cimg src=\"https:\u002F\u002Favatars1.githubusercontent.com\u002Fu\u002F12068299?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>dirtmelon\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002Fdirtmelon)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=dirtmelon \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars0.githubusercontent.com\u002Fu\u002F103670?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Heberti Almeida\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fdribbble.com\u002Fhebertialmeida)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=hebertialmeida \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F501784?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Felix Weiss\u003C\u002Fb>\u003C\u002Fsub>](http:\u002F\u002Fothellogame.net)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=appsunited \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars1.githubusercontent.com\u002Fu\u002F8625327?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>.Some\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fgithub.com\u002FBigDanceMouse)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=BigDanceMouse \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars3.githubusercontent.com\u002Fu\u002F4017312?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Onur Var\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Ftr.linkedin.com\u002Fin\u002Fonur-var)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=OnurVar \"Code\") | [\u003Cimg src=\"https:\u002F\u002Favatars3.githubusercontent.com\u002Fu\u002F1316152?v=4\" width=\"60px;\"\u002F>\u003Cbr \u002F>\u003Csub>\u003Cb>Andrew Barba\u003C\u002Fb>\u003C\u002Fsub>](https:\u002F\u002Fabarba.me)\u003Cbr \u002F>[💻](https:\u002F\u002Fgithub.com\u002Fsuzuki-0000\u002FSKPhotoBrowser\u002Fcommits?author=AndrewBarba \"Code\") |\n\u003C!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https:\u002F\u002Fgithub.com\u002Fkentcdodds\u002Fall-contributors) specification. Contributions of any kind welcome!\n","SKPhotoBrowser 是一个用 Swift 编写的简单图片浏览器\u002F查看器，灵感来源于 Facebook 和 Twitter 的图片浏览功能。其核心功能包括支持通过 UIImage 对象或 URL 数组展示一张或多张图片，具备缩放、平移以及显示可选标题的能力，并且拥有类似 Facebook 的极简界面设计，支持手势操作如上下滑动关闭等。此外，它还提供了自定义控制选项（如隐藏或显示工具栏）、处理和缓存网络图片等功能。适用于需要在 iOS 应用中集成高质量图片浏览体验的场景，特别是那些希望为用户提供流畅直观图像交互的应用程序。",2,"2026-06-11 03:10:27","top_language"]