{"id":1565,"url":"https://github.com/mariohahn/MHVideoPhotoGallery","last_synced_at":"2025-08-02T04:32:11.541Z","repository":{"id":13056816,"uuid":"15737031","full_name":"mariohahn/MHVideoPhotoGallery","owner":"mariohahn","description":"A Photo and Video Gallery ","archived":false,"fork":false,"pushed_at":"2021-10-06T11:35:12.000Z","size":29049,"stargazers_count":1954,"open_issues_count":66,"forks_count":348,"subscribers_count":81,"default_branch":"master","last_synced_at":"2025-06-30T08:52:34.558Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mariohahn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-08T14:05:52.000Z","updated_at":"2025-05-19T06:08:08.000Z","dependencies_parsed_at":"2022-08-28T09:41:09.945Z","dependency_job_id":null,"html_url":"https://github.com/mariohahn/MHVideoPhotoGallery","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/mariohahn/MHVideoPhotoGallery","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariohahn%2FMHVideoPhotoGallery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariohahn%2FMHVideoPhotoGallery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariohahn%2FMHVideoPhotoGallery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariohahn%2FMHVideoPhotoGallery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mariohahn","download_url":"https://codeload.github.com/mariohahn/MHVideoPhotoGallery/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mariohahn%2FMHVideoPhotoGallery/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268334346,"owners_count":24233786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:15:49.988Z","updated_at":"2025-08-02T04:32:10.183Z","avatar_url":"https://github.com/mariohahn.png","language":"Objective-C","funding_links":[],"categories":["Media","Gallery","Objective-C","etc","Players \u0026 Clients","Uncategorized"],"sub_categories":["Video","Other free courses","Mobile \u0026 Web Players","Uncategorized"],"readme":"\n\u003cp align=\"center\" \u003e\n  \u003cimg src=\"https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/galleryIcon.png?raw=true\" alt=\"MHGallery\" title=\"MHGallery\"\u003e\n\u003c/p\u003e\n==================\n\n\u003cp align=\"left\" \u003e\n  \u003cimg src=\"https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/BTC.png?raw=true\" alt=\"MHGallery\" title=\"MHGallery\"\u003e\n\u003c/p\u003e\nbitcoin:1Lj45X69tPYAPqnZP2c9Ccs349fC2CEMQo\n\n## Podfile\n\n```ruby\nplatform :ios, '7.0'\npod 'MHVideoPhotoGallery'\n```\n## Supported Videos\n```ruby\nYoutube\nVimeo\nWeblinks (.mov, .mp4, .mpv)\n```\n## Supported Languages\n```ruby\nDE,EN,ES,FR,HR,IT,PT,RU,DA,ZH-Hans\n```\n## MHGalleryItem \n```objective-c\n+ (instancetype)itemWithURL:(NSString *)URLString thumbnailURL:(NSString*)thumbnailURL; //Thumbs are automatically generated for Videos. But you can set Thumb Images for GalleryTypeImage.\n+ (instancetype)itemWithURL:(NSString*)URLString galleryType:(MHGalleryType)galleryType;\n+ (instancetype)itemWithYoutubeVideoID:(NSString*)ID;\n+ (instancetype)itemWithVimeoVideoID:(NSString*)ID;\n+ (instancetype)itemWithImage:(UIImage*)image;\n```\n\n## MHGalleryController\n```objective-c\n\n+(instancetype)galleryWithPresentationStyle:(MHGalleryViewMode)presentationStyle;\n\n@property (nonatomic,assign) id\u003cMHGalleryDelegate\u003e              galleryDelegate;\n@property (nonatomic,assign) id\u003cMHGalleryDataSource\u003e            dataSource;\n@property (nonatomic,assign) BOOL                               autoplayVideos; //Default NO\n@property (nonatomic,assign) NSInteger                          presentationIndex; //From which index you want to present the Gallery.\n@property (nonatomic,strong) UIImageView                        *presentingFromImageView;\n@property (nonatomic,strong) MHGalleryImageViewerViewController *imageViewerViewController;\n@property (nonatomic,strong) MHOverviewController               *overViewViewController;\n@property (nonatomic,strong) NSArray                            *galleryItems; //You can set an Array of GalleryItems or you can use the dataSource.\n@property (nonatomic,strong) MHTransitionCustomization          *transitionCustomization; //Use transitionCustomization to Customize the GalleryControllers transitions\n@property (nonatomic,strong) MHUICustomization                  *UICustomization; //Use UICustomization to Customize the GalleryControllers UI\n@property (nonatomic,strong) MHTransitionPresentMHGallery       *interactivePresentationTransition;\n@property (nonatomic,assign) MHGalleryViewMode                  presentationStyle;\n@property (nonatomic,assign) UIStatusBarStyle                   preferredStatusBarStyleMH;\n\n@property (nonatomic, copy) void (^finishedCallback)(NSUInteger currentIndex,UIImage *image,MHTransitionDismissMHGallery *interactiveTransition,MHGalleryViewMode viewMode);\n\n```\n\n\n## UI Customization\n```objective-c\n@property (nonatomic)        UIBarStyle barStyle; //Default UIBarStyleDefault\n@property (nonatomic,strong) UIColor *barTintColor; //Default nil\n@property (nonatomic,strong) UIColor *barButtonsTintColor; //Default nil\n@property (nonatomic,strong) UIColor *videoProgressTintColor; //Default Black\n@property (nonatomic)        BOOL showMHShareViewInsteadOfActivityViewController; //Default YES\n@property (nonatomic)        BOOL hideShare; //Default NO\n@property (nonatomic)        BOOL useCustomBackButtonImageOnImageViewer; //Default YES\n@property (nonatomic)        BOOL showOverView; //Default YES\n@property (nonatomic)        MHBackButtonState backButtonState; //Default MHBackButtonStateWithBackArrow\n\n@property (nonatomic,strong) UIBarButtonItem *customBarButtonItem; //A optional UIBarButtonItem displayed in the lower right corner. Default nil\n\n@property (nonatomic,strong) UICollectionViewFlowLayout *overViewCollectionViewLayoutLandscape;\n@property (nonatomic,strong) UICollectionViewFlowLayout *overViewCollectionViewLayoutPortrait;\n\n-(void)setMHGalleryBackgroundColor:(UIColor*)color forViewMode:(MHGalleryViewMode)viewMode;\n-(UIColor*)MHGalleryBackgroundColorForViewMode:(MHGalleryViewMode)viewMode;\n```\n\n## Transition Customization\n```objective-c\n@property (nonatomic)       BOOL interactiveDismiss; //Default YES\n@property (nonatomic)       BOOL dismissWithScrollGestureOnFirstAndLastImage;//Default YES\n@property (nonatomic)       BOOL fixXValueForDismiss; //Default NO\n```\n\n## Usage\n\n```objective-c\n\n\nUIImageView *imageView = [(ImageTableViewCell*)[tableView cellForRowAtIndexPath:indexPath] imageView];\n        \nMHGalleryItem *image1 = [MHGalleryItem itemWithURL:@\"myImageURL\" galleryType:MHGalleryTypeImage];\nMHGalleryItem *image2 = [MHGalleryItem itemWithURL:@\"myImageURL\" galleryType:MHGalleryTypeImage];\nMHGalleryItem *youtube = [MHGalleryItem itemWithYoutubeVideoID:@\"myYoutubeID\"];\n\nNSArray *galleryData = @[image1,image2,youtube];\n    \n    MHGalleryController *gallery = [MHGalleryController galleryWithPresentationStyle:MHGalleryViewModeImageViewerNavigationBarShown];\ngallery.galleryItems = galleryData;\ngallery.presentingFromImageView = imageView;    \ngallery.presentationIndex = indexPath.row;\n        \n__weak MHGalleryController *blockGallery = gallery;\n       \ngallery.finishedCallback = ^(NSUInteger currentIndex,UIImage *image,MHTransitionDismissMHGallery *interactiveTransition){\n        \n        NSIndexPath *newIndex = [NSIndexPath indexPathForRow:currentIndex inSection:0];\n        \n        [self.tableView scrollToRowAtIndexPath:newIndex atScrollPosition:UITableViewScrollPositionMiddle animated:NO];\n        \n        dispatch_async(dispatch_get_main_queue(), ^{\n            UIImageView *imageView = [(ImageTableViewCell*)[self.tableView cellForRowAtIndexPath:newIndex] iv];\n            [blockGallery dismissViewControllerAnimated:YES dismissImageView:imageView completion:nil];\n        });\n\n    };    \n[self presentMHGalleryController:gallery animated:YES completion:nil];\n```\n\n## Dismiss Video (Like Paper App)\n\n![alt tag](https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/dismissInteractiveVideo.gif?raw=true)\n\n## Dismiss Image (Like Paper App)\n\n![alt tag](https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/dismissInteractive.gif?raw=true)\n\n## Dismiss at the end or start on ScrollDirection (Like Paper App)\n\n![alt tag](https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/dismissAtTheEnd.gif?raw=true)\n\n## OverView interactive (dismiss \u0026 present)\n\n![alt tag](https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/interactive.gif?raw=true)\n\n## Share\n\n![alt tag](https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/ShareView.gif?raw=true)\n\n## OverView \n\n![alt tag](https://github.com/mariohahn/MHVideoPhotoGallery/blob/master/Images%20Github/OverView.gif?raw=true)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariohahn%2FMHVideoPhotoGallery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmariohahn%2FMHVideoPhotoGallery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmariohahn%2FMHVideoPhotoGallery/lists"}