{"id":32312813,"url":"https://github.com/meterwhite/sdmask","last_synced_at":"2025-10-23T09:59:59.738Z","repository":{"id":62453532,"uuid":"50644565","full_name":"Meterwhite/SDMask","owner":"Meterwhite","description":"A perfect iOS mask view that help you to present custom view and guid page.User dont need to care about animations and events.","archived":false,"fork":false,"pushed_at":"2024-09-05T16:15:42.000Z","size":5576,"stargazers_count":54,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-23T09:59:46.454Z","etag":null,"topics":["actionsheet-hud","actionsheet-mask","alert-hud","alert-mask","cover-view","guid-controller","hud","ios-cover","ios-guid","ios-mask","maskview"],"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/Meterwhite.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":"2016-01-29T06:59:00.000Z","updated_at":"2025-02-08T02:22:38.000Z","dependencies_parsed_at":"2022-11-02T00:00:28.243Z","dependency_job_id":null,"html_url":"https://github.com/Meterwhite/SDMask","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/Meterwhite/SDMask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meterwhite%2FSDMask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meterwhite%2FSDMask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meterwhite%2FSDMask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meterwhite%2FSDMask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Meterwhite","download_url":"https://codeload.github.com/Meterwhite/SDMask/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meterwhite%2FSDMask/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280598945,"owners_count":26357977,"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-10-23T02:00:06.710Z","response_time":142,"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":["actionsheet-hud","actionsheet-mask","alert-hud","alert-mask","cover-view","guid-controller","hud","ios-cover","ios-guid","ios-mask","maskview"],"created_at":"2025-10-23T09:59:55.977Z","updated_at":"2025-10-23T09:59:59.731Z","avatar_url":"https://github.com/Meterwhite.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SDMask\n\u003e [修改Cocoapods源代码!](https://github.com/Meterwhite/ObjcHook4pod)\n\u003e \n\u003e [新的ObjC语言效率工具！](https://github.com/Meterwhite/Objc2020)\n\u003e\n\u003e [本地化解决方案](https://github.com/Meterwhite/SDLocalize)\n![SDMask icon](https://raw.githubusercontent.com/Meterwhite/SDMask/master/Cover.png) \n![SDMaskGuidController icon](https://raw.githubusercontent.com/Meterwhite/SDMask/master/Cover2.png)\n## 介绍 Introduce\n* A perfect iOS mask view that help you to present custom view.User dont need to care about animations and events.\n* Skir的（SD）iOS蒙版蒙层遮罩.弹出自定义视图，用户不再关心动画和点击事件。\n* 点赞富一生.\n* Good luck for one start .\n\n## Import\n- Drag floder `SDMask` to your project.\n```objc\n#import \"SDMask.h\"\n```\n## CocoaPods\n```\npod 'SDMask'\n```\n\n## 常用形式 High frequency code.(推荐 recommended)\n```objc\n[SDMaskUserView(customAlertView) sdm_showAlertUsingBlock:^(SDMask\u003cUserView*\u003e*  _Nonnull mask) {\n    /// You can bind control events to SDMask\n    [mask bindEventForControls:@[mask.userView.OKButton]] \n    [mask bindEventForCancelControl:mask.userView.CancelButton];\n    [mask bindingEventsUsingBlock:^(SDMaskBindingEvent * event) {\n        if(event.index == 0){\n            /// okButton...\n        }\n    }];\n    [mask userViewDidLoad:^(SDMaskModel\u003cUserView*\u003e * model) {\n        model.setAutolayoutValueForKey(@(0), @\"bottom\").\n            setAutolayoutValueForKey(@(15), @\"left\").\n            setAutolayoutValueForKey(@(15), @\"right\").\n            setAutolayoutValueForKey(@(350), @\"height\");\n    }];\n    ... ...\n}];\n```\n## 分步处理复杂的业务 Step-by-step processing of complex business.\n```objc\nSDMask\u003cUserView*\u003e* mask = SDAlertMaskWith(currentController, userView);\n[mask userViewDidLoad:^(SDMaskModel\u003cUserView*\u003e * model) {\n    model.\n    setAutolayoutValueForKey(@(0),   @\"bottom\").\n    setAutolayoutValueForKey(@(15),  @\"left\").\n    setAutolayoutValueForKey(@(15),  @\"right\").\n    setAutolayoutValueForKey(@(350), @\"height\");\n}];\n[mask bindEventForControls:@[Button1, Button2, [Button3 sdm_withBindingKey:@\"MyKey\"], ...]];\n[mask bindEventForCancelControl:CancelButton];\n[mask bindingEventFor:Button1 usingBlock:^(SDMaskBindingEvent\u003cUserView*\u003e * event) {\n    /// ...\n}];\n[mask bindingEventFor:@\"MyKey\" usingBlock:^(SDMaskBindingEvent\u003cUserView*\u003e * event) {\n    /// ...\n}];\n[mask show];\n```\n## 引导控制器 SDMaskGuidController\n### 在一个XIB文件中设置多个页面的约束进行适配，可以适应90%的设计需求。Set multiple guid pages in one controller XIB file ! By changing the constraints in XIB to adapt the device, this solution can address 90% of the design needs.\n```objc\n[[[MySDMaskGuidController new] userViewDidLoad:^(SDMaskModel * _Nonnull model) {\n    /// Set the same color as user view to background.\n    [model setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.6]];\n}] show];\n```\n## 链式编程 Chain programming\n-  链式编程涵盖了大多数方法 Chained programming covers most methods\n```objc\n[...[[[mask bindEventForControls:@[okButton]] bindEventForCancelControl:cancelButton] bindingEventsUsingBlock:^(SDMaskBindingEvent\u003cUserView*\u003e* event) {\n    \n}]... show];\n```\n## Use autolayout\n### 自动布局的两种方式 Tow ways to use autolayout.\n- a. 框架提供 Use the methods provided by the SDMask to use autolayout. \n```objc\n[mask userViewDidLoad:^(SDMaskModel\u003cUserView*\u003e * model) {\n    model.\n    setAutolayoutValueForKey(@(0), @\"bottom\").\n    setAutolayoutValueForKey(@(15), @\"left\").\n    setAutolayoutValueForKey(@(15), @\"right\").\n    setAutolayoutValueForKey(@(350), @\"height\");\n}];\n```\n- b. 三方或手动布局 Autolayout by youself. Like 'masonry'\n```objc\n[mask userViewDidLoad:^(SDMaskModel\u003cUserView*\u003e * model) {\n    [model.userView mas_makeConstraints:^(MASConstraintMaker *make) {\n        make.center.equalTo(model.containerView);\n        make.left.equalTo(model.containerView.mas_left).offset(20);\n        make.right.equalTo(model.containerView.mas_right).offset(-20);\n    }];\n}];\n```\n## 自定义动画 Use custom animations\n- Framelayout\n```objc\n[[[[[mask userViewPresentationWillAnimate:^(SDMaskModel\u003cUserView*\u003e * model) {\n    userView.frame = frameA;\n}] userViewPresentationDoAnimations:^(SDMaskModel\u003cUserView*\u003e * model) {\n    userView.frame = frameB;\n}] userViewDismissionWillAnimate:^(SDMaskModel\u003cUserView*\u003e * model) {\n    /// ...\n}] userViewDismissionDoAnimations:^(SDMaskModel\u003cUserView*\u003e * model) {\n    userView.frame = frameA;\n}] disableSystemAnimation];\n```\n- Autolayout\n```objc\n[[[[[mask userViewPresentationWillAnimate:^(SDMaskModel\u003cUserView*\u003e * model) {\n    userView.bottonConstraint = A;\n    //[self.view setNeedsLayout];\n    //[self.view layoutIfNeeded];\n}] userViewPresentationDoAnimations:^(SDMaskModel\u003cUserView*\u003e * model) {\n    userView.bottonConstraint = B;\n    [self.view setNeedsLayout];\n    [self.view layoutIfNeeded];\n}] userViewDismissionWillAnimate:^(SDMaskModel\u003cUserView*\u003e * model) {\n    /// ...\n}] userViewDismissionDoAnimations:^(SDMaskModel\u003cUserView*\u003e * model) {\n    userView.bottonConstraint = A;\n    [self.view setNeedsLayout];\n    [self.view layoutIfNeeded];\n}] disableSystemAnimation];\n```\n## 使用泛型 Use generics\n* 泛型宏定义的使用可以避免在外部声明弱引用 The use of macro definitions for generic functions can avoid declaring weak references externally  \n\n## Email\n- 项目合作：meterwhite@outlook.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeterwhite%2Fsdmask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeterwhite%2Fsdmask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeterwhite%2Fsdmask/lists"}