-
2019-02-27 18:06:09
通常一个app都会有新手引导页,就是进入app后打开相应的页面会出现引导页,这里是用DialogFragment实现一个简单又比较完善的新手引导页功能。
public class GuideFragment extends BaseDialogFragment implements View.OnClickListener { private static final String GUIDE_PROP = "Guide.prop"; protected static Set<String> sHasShowSet = new HashSet<>(); protected static String mKey; @BindView(R.id.cl_guide) ConstraintLayout mClGuide; protected static GuideFragment newInstance(int layoutRes) { Bundle args = new Bundle(); args.putInt(Constant.KEY_GUIDE_RES, layoutRes); GuideFragment fragment = new GuideFragment(); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_TITLE, R.style.TransparentDialog); } @Override protected int getFragmentLayout() { return getArguments().getInt(Constant.KEY_GUIDE_RES); } @Override protected void initViewComponent(@Nullable Bundle savedInstanceState) { super.initViewComponent(savedInstanceState); adapterView(mKey); if (getView() != null) { getView().setOnClickListener(this); } } /** * @param activity * @param layoutRes 布局资源文件 * @param key 唯一标识,区分是否显示过,通过SharedPreferences进行保存 */ public static void show(AppCompatActivity activity, int layoutRes, String key) { mKey = key; if (!sHasShowSet.contains(key)) { if (getNeedShowGuide(activity,key)) { setNoNeedShowGuide(activity,key); newInstance(layoutRes) .show(activity.getSupportFragmentManager(),activity.getClass().getSimpleName()); } sHasShowSet.add(key); } } /** * 根据实际情况适配自己的布局 * @param key 根据key区分哪个引导页进行不同的适配 */ private void adapterView(String key) { FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mClGuide.getLayoutParams(); mClGuide.setLayoutParams(layoutParams); } @Override public void onClick(View v) { dismiss(); } protected static boolean getNeedShowGuide(Context context,String key) { return SPUtils.getInstance(context, GUIDE_PROP).getBoolean(key, true); } protected static void setNoNeedShowGuide(Context context,String key) { SPUtils.getInstance(context, GUIDE_PROP).put(key, false); } }
上面这个类是具体的实现类,里面有相应的注视,想要在你的页面弹出引导页很简单,下面把代码再贴出来。
public class MainActivity extends BaseActivity { private static final String GUIDE_KEY = "main_guide_pager"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //通过实现下面的两个方法就可以了 @Override protected int getGuideLayout() { return R.layout.guide_layout; } @Override protected String getGuideKey() { return GUIDE_KEY; } }
只需要实现里面的两个方法就可以了,这两个方法是在基类中的,下面是activity基类
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); showGuideDialog(); } /** * 显示引导页,可以根据具体的业务需求进行显示控制 */ protected void showGuideDialog(){ if (getGuideLayout() != -1 && !TextUtils.isEmpty(getGuideKey())) { GuideFragment.show(this, getGuideLayout(), getGuideKey()); } } /** * override this function for show guide view, see to {@link #getGuideKey()}. */ protected int getGuideLayout() { return -1; } /** * override this function for show guide view, see to {@link #getGuideKey()}. */ protected String getGuideKey() { return ""; } }
很方便的就实现了新手引导的功能,下面把项目的下载地址贴出来哈。
更多相关内容 -
swift_新手引导页
2018-10-19 15:22:13swift 语言实现通用App安装引导页的实现,其实这个功能和引导页差不多用UIScrollView的contentSize和contentOffset(偏移量)这两个属性 -
Android中用Dialog来做使用引导/新手引导页面
2021-01-05 17:40:32安卓APP首次打开时会有半透明的蒙版将目标以高亮显示并配有说明文字或图片。这里用自定义dialog的方式实现引导页面。 -
Android 新手引导页
2018-02-26 16:58:43有需要的可以看看哦,不错的新手引导页,代码是完整的,Android studio 运行,eclipse的可以复制代码哦 -
新手引导页面实现
2017-01-04 16:41:19新手引导页面实现 -
GuideHelper 实现Android新手引导页
2021-06-04 16:52:56GuideHelper 实现Android新手引导页可以在提示也绘制实际的view,在view的上下左右位置添加提示信息的图片gradle导入compile 'com.shizhefei:GuideHelper:1.0.5'#代码如下:final GuideHelper guideHelper = new ...GuideHelper 实现Android新手引导页
可以在提示也绘制实际的view,在view的上下左右位置添加提示信息的图片
gradle导入
compile 'com.shizhefei:GuideHelper:1.0.5'
#代码如下:
final GuideHelper guideHelper = new GuideHelper(MainActivity.this);
TipData tipData1 = new TipData(R.drawable.tip1, Gravity.RIGHT | Gravity.BOTTOM, iconView);
tipData1.setLocation(0, -DisplayUtils.dipToPix(v.getContext(), 50));
guideHelper.addPage(tipData1);
//
TipData tipData2 = new TipData(R.drawable.tip2, citysView);
guideHelper.addPage(tipData2);
//
TipData tipData3 = new TipData(R.drawable.tip3, infoLayout);
guideHelper.addPage(tipData3);
guideHelper.addPage(tipData1, tipData2, tipData3);
//add custom view
LayoutInflater ll = LayoutInflater.from(MainActivity.this);
View testView = ll.inflate(R.layout.custom_view,null);
TipData tipDataCustom= new TipData(Gravity.CENTER,new Rect(),testView);
testView.findViewById(R.id.guide_close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
guideHelper.dismiss();
}
});
guideHelper.setAutoDismiss(false);//一般不设置,默认是true
guideHelper.addPage(tipDataCustom);
guideHelper.show(false);
// guideHelper.show(true);
#效果如下:
##主力类库##
有了这些类库,让你6的飞起
联系方式和问题建议
QQ 群: 开源项目使用交流,问题解答: 549284336(开源盛世)
License
Copyright 2016 shizhefei(LuckyJayce)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-
vue实现新手引导组件
2021-10-19 15:28:01vue实现新手引导 -
ios-新手引导页封装.zip
2019-07-11 20:02:54每个项目都要写新手引导页,很麻烦,自己简单的装置了一个新手引导页,很实用,也很简单,只需要将HSGuidePage的两个文字导入, 在Appdelegate中简单设置就能完成。新手,代码又点烂,希望大家莫要取笑,更希望大家... -
OC-添加新手引导页
2018-10-19 15:18:55iOS OC 语言实现通用App安装引导页的实现,其实这个功能和引导页差不多用UIScrollView的contentSize和contentOffset(偏移量)这两个属性 -
ios-新手引导页面,透明遮罩指引页.zip
2019-07-11 18:35:12Demo介绍:封装新手引导页面,有镂空部分,附有描述,只显示一次,控制器调用简单。 实现思路:实现一个UIView,添加到keyWindow,通过设置其layer的mask属性来实现镂空区域。 开发语音:Objective-C。 CSDN博客... -
ios-新手引导页面效果.zip
2019-07-11 19:00:29新手引导页面效果,在一个视图上覆盖一个半透明层,部分全透,带箭头指示并显示操作效果说明等,具体看运行效果吧,使用简单 -
基于ViewPager实现的新手引导页(带按钮)
2015-11-10 18:36:11基于ViewPager实现的新手引导页 1.底部圆点跟随手指移动 2.最后一页带进出主界面按钮 -
HTML-手机APP新手引导页步骤演示模板
2021-06-01 21:25:26 -
ios-新手引导页.zip
2019-07-11 18:49:11适用于所有App的新手指引,使用简单,动画顺畅! 如果你觉得还不错,希望赏个star,谢谢了! Github传送门:https://github.com/weiming4219/ZWMGuideView -
贴一个刚做的新手引导页
2019-04-01 17:41:18前阵子有个新手引导的需求,本来同事说用UI框架的modal框做,想了想感觉下一步的动作太生硬了,干脆就自己动手写了写,效果还不错。 主要用css animation做跳转动画,用绝对定位定位引导框 效果如下: vue文件 <...前阵子有个新手引导的需求,本来同事说用UI框架的modal框做,想了想感觉下一步的动作太生硬了,干脆就自己动手写了写,效果还不错。
主要用css animation做跳转动画,用绝对定位定位引导框
效果如下:
vue文件
<!-- 新手引导 --> <template> <div> <div class="model"> <div class="page-container"> <div class="step1 text-center shadow" v-show='step === 1'> <i class="btn-close el-icon-close" @click='closeGuide'></i> <img src="./../images/guide/guide-img-start.png" alt=""> <p class="font-18 color-333 text">{{$t('m.guide.text1')}}</p> <p class="font-12 color-999 choose">{{$t('m.guide.choose')}}</p> <el-popover placement="bottom" width="160" v-model="showPopover" trigger="hover"> <ul class="lang-list"> <li class="font-14" @click='changeLang(item)' v-for="(item,index) in list" :key='index' :value='item.lang'>{{item.lang}}</li> </ul> <span slot="reference" class="color-555 touch">{{lang}} <i class="el-icon-arrow-down"></i> </span> </el-popover> <br> <el-button type='warning' @click="step = 2" class="btn">{{$t('m.common.next')}}</el-button> </div> <div class="step2 shadow" :class="{nextStep2: step === 2 && direction === 'next', preStep2: step === 2 && direction === 'pre', nextStep3: step === 3 && direction === 'next', preStep3: step === 3 && direction === 'pre', nextStep4: step === 4 && direction === 'next', preStep4: step === 4 && direction === 'pre', nextStep5: step === 5 && direction === 'next'}" v-show='step !== 1'> <div class="mark text-center"> <span v-if='step === 2'>{{$t('m.menu.title2')}}</span> <span v-if='step === 3'>{{$t('m.menu.title3')}}</span> <span v-if='step === 4'>{{$t('m.menu.title4')}}</span> <span v-if='step === 5'>{{$t('m.header.helpCenter')}}</span> <i class="el-icon-arrow-down"></i></div> <div class="vl"></div> <div class="main"> <i class="btn-close el-icon-close" @click='closeGuide'></i> <img src="./../images/guide/guide-img-adcenter.png" class="fl" alt=""> <div class="fr right"> <p v-if='step === 2'>{{$t('m.guide.text2')}}</p> <p v-if='step === 3'>{{$t('m.guide.text3')}}</p> <p v-if='step === 4'>{{$t('m.guide.text4')}}</p> <p v-if='step === 5'>{{$t('m.guide.text5')}}</p> <p class="text-right btn-list"> <el-button plain @click="step--, direction = 'pre'"> <img src="./../images/guide/guide-icon-left-default.png" alt=""> </el-button> <el-button class="btn-next" v-if='step !== 5' @click="step++, direction = 'next'"> <img src="./../images/guide/guide-icon-right-default.png" alt=""> </el-button> <el-button v-if='step === 5' @click='closeGuide' class="btn-next"> {{$t('m.guide.start')}} </el-button> </p> </div> </div> </div> </div> </div> </div> </template> <script> export default { // props: [ 'step' ], data () { return { step: 1, direction: 'next', showPopover: false, list: [ { lang: 'English', code: 'en' }, { lang: 'Spanish', code: 'es' }, { lang: 'Portuguese', code: 'pt' }, { lang: 'Russian', code: 'ru' }, { lang: 'Italian', code: 'id' }, { lang: 'French', code: 'fr' }, { lang: 'German', code: 'de' }, { lang: 'Polish', code: 'pl' } ], lang: 'English' } }, components: {}, created: function () { }, methods: { changeLang: function (item) { this.$emit('changeLang', item) this.lang = item.lang this.showPopover = false }, closeGuide: function () { this.$emit('closeGuide') } } } </script> <style lang='stylus' scoped> .page-container{ position relative line-height 12px } .model{ width 100vw height 100vh background rgba(0, 0, 0, 0.3) position fixed top 0 left 0 z-index 999 } .shadow{ box-shadow:0px 2px 3px 1px rgba(0,0,0,0.1) border-radius:4px } .btn-close{ position absolute top 5px right 5px cursor pointer } .main{ padding 16px 7px 12px 16px .right{ width 240px p{ font-size 14px color #333333 line-height 22px } .btn-list{ position absolute bottom 12px right 7px .el-button{ width 60px height 24px } .btn-next{ background rgba(255,233,207,1) border-radius 2px border 1px solid rgba(251,136,0,1) } } } } .step1{ width 400px height 474px margin auto padding 60px 48px 0 background #fff margin-top 200px position relative .text{ line-height 28px margin-top 40px margin-bottom 30px } .choose{ line-height 17px font-style italic margin-bottom 10px } .btn{ width 140px height 40px margin-top 40px } } .step2{ position absolute top 170px left 80px width 388px height 140px background #fff } .nextStep2{ animation goToStep2 0.5s ease } .preStep2{ animation backToStep2 0.5s ease } .preStep3{ left 200px animation backToStep3 0.5s ease } .nextStep3{ left 200px animation goToStep3 0.5s ease } .preStep4{ left 320px width 388px animation backToStep4 0.6s ease .mark{ width 160px } } .nextStep4{ left 320px width 388px animation goToStep4 0.5s ease .mark{ width 160px } } .nextStep5{ left unset left 825px top 90px animation goToStep5 0.6s ease .mark{ width 180px left 40px } .vl{ left 100px } } @keyframes backToStep2 { 0% { transform: scale(1.0) left 200px } 50%{ transform: scale(0) left 0px } 100% { transform: scale(1.0) left 80px } } @keyframes goToStep2 { from { transform: scale(0) } to{ transform: scale(1.0) } } @keyframes goToStep3 { 0% { transform: scale(1.0) left 80px } 50%{ transform: scale(0) left 140px } 100% { transform: scale(1.0) left 200px } } @keyframes backToStep3 { 0% { transform: scale(1.0) left 320px } 50%{ transform: scale(0) left 160px } 100% { transform: scale(1.0) left 200px } } @keyframes goToStep4 { 0% { transform: scale(1.0) left 200px } 50%{ transform: scale(0) left 240px } 100% { transform: scale(1.0) left 320px } } @keyframes backToStep4 { 0% { transform: scale(1.0) left 825px } 50%{ transform: scale(0) left 520px top 120px } 100% { transform: scale(1.0) left 320px top 170px } } @keyframes goToStep5 { 0% { transform: scale(1.0) left 320px } 50%{ transform: scale(0) left 520px top 120px } 100% { transform: scale(1.0) left 825px top 90px } } .mark{ width 125px height 40px line-height 40px border-radius 20px position absolute font-size 13px top -60px left 0 background #fff } .vl{ width 2px height 20px background #ffffff position absolute top -20px left 60px } .lang-list{ cursor pointer list-style none color #222222 line-height 36px padding-top 10px .user-email{ padding-left 24px color #555 border-bottom 1px solid #ddd } li{ padding-left 24px } li:hover{ color #ff9e00 background rgba(255,158,0,0.1) } } </style>
-
手机APP新手引导页步骤演示模板.zip
2019-05-24 13:48:05手机APP新手引导页步骤演示模板,DIV CSS布局设计,全套模板,包括电工认证流程、抢单流程、发需求流程等HTML专题模板页面。 -
iOS 新手引导页面,透明遮罩指引页 —— HERO博客
2018-04-21 15:49:45首先看一下Demo效果图:这种遮罩通常作为新手引导页面。通常有镂空的一部分,附有描述,指引用户第一次进入界面该如何操作,只显示一次。下面给出两种实现思路:第一种:UI切好整张图片,直接显示到UIWindow上,不...首先看一下Demo效果图:
这种遮罩通常作为新手引导页面。通常有镂空的一部分,附有描述,指引用户第一次进入界面该如何操作,只显示一次。
下面给出两种实现思路:
第一种:UI切好整张图片,直接显示到UIWindow上,不推荐使用该方法。
优点:程序实现简单,便捷。
缺点:适配不同机型需要多套图片(Android内心是崩溃的),后期迭代界面改动则要更新图片,UI工作量庞大。
第二种:Demo使用的方法,自己实现一个UIView,通过设置其layer的mask属性来实现镂空区域。
优点:UI只提供描述的图片即可,减少应用大小,灵活适配不同机型。
缺点:代码较第一种略多,后期迭代界面改动要更新控件frame。
下面贴上核心代码:
控制器,ViewController:
#import "ViewController.h" #import "HWGuidePageManager.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // 创建控件 [self creatControl]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 引导视图 [self showGuidePage]; } - (void)creatControl { // 底图 UIImageView *imgView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds]; imgView.image = [UIImage imageNamed:@"backImg"]; imgView.contentMode = UIViewContentModeScaleAspectFill; [self.view addSubview:imgView]; } - (void)showGuidePage { // 判断是否已显示过 if (![[NSUserDefaults standardUserDefaults] boolForKey:HWGuidePageHomeKey]) { // 显示 [[HWGuidePageManager shareManager] showGuidePageWithType:HWGuidePageTypeHome completion:^{ [[HWGuidePageManager shareManager] showGuidePageWithType:HWGuidePageTypeMajor]; }]; } } @end
封装的指引页管理类,HWGuidePageManager.h:
#import <Foundation/Foundation.h> typedef void(^FinishBlock)(void); typedef NS_ENUM(NSInteger, HWGuidePageType) { HWGuidePageTypeHome = 0, HWGuidePageTypeMajor, }; @interface HWGuidePageManager : NSObject // 获取单例 + (instancetype)shareManager; /** 显示方法 @param type 指引页类型 */ - (void)showGuidePageWithType:(HWGuidePageType)type; /** 显示方法 @param type 指引页类型 @param completion 完成时回调 */ - (void)showGuidePageWithType:(HWGuidePageType)type completion:(FinishBlock)completion; @end
HWGuidePageManager.m:
#import "HWGuidePageManager.h" @interface HWGuidePageManager () @property (nonatomic, copy) FinishBlock finish; @property (nonatomic, copy) NSString *guidePageKey; @property (nonatomic, assign) HWGuidePageType guidePageType; @end @implementation HWGuidePageManager + (instancetype)shareManager { static HWGuidePageManager *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; } - (void)showGuidePageWithType:(HWGuidePageType)type { [self creatControlWithType:type completion:NULL]; } - (void)showGuidePageWithType:(HWGuidePageType)type completion:(FinishBlock)completion { [self creatControlWithType:type completion:completion]; } - (void)creatControlWithType:(HWGuidePageType)type completion:(FinishBlock)completion { _finish = completion; // 遮盖视图 CGRect frame = [UIScreen mainScreen].bounds; UIView *bgView = [[UIView alloc] initWithFrame:frame]; bgView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7f]; [bgView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]]; [[UIApplication sharedApplication].keyWindow addSubview:bgView]; // 信息提示视图 UIImageView *imgView = [[UIImageView alloc] init]; [bgView addSubview:imgView]; // 第一个路径 UIBezierPath *path = [UIBezierPath bezierPathWithRect:frame]; switch (type) { case HWGuidePageTypeHome: // 下一个路径,圆形 [path appendPath:[UIBezierPath bezierPathWithArcCenter:KSuitPoint(227, 188) radius:KSuitFloat(46) startAngle:0 endAngle:2 * M_PI clockwise:NO]]; imgView.frame = KSuitRect(220, 40, 100, 100); imgView.image = [UIImage imageNamed:@"hi"]; _guidePageKey = HWGuidePageHomeKey; break; case HWGuidePageTypeMajor: // 下一个路径,矩形 [path appendPath:[[UIBezierPath bezierPathWithRoundedRect:KSuitRect(5, 436, 90, 40) cornerRadius:5] bezierPathByReversingPath]]; imgView.frame = KSuitRect(100, 320, 120, 120); imgView.image = [UIImage imageNamed:@"ly"]; _guidePageKey = HWGuidePageMajorKey; break; default: break; } // 绘制透明区域 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = path.CGPath; [bgView.layer setMask:shapeLayer]; } - (void)tap:(UITapGestureRecognizer *)recognizer { UIView *bgView = recognizer.view; [bgView removeFromSuperview]; [bgView removeGestureRecognizer:recognizer]; [[bgView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; bgView = nil; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:_guidePageKey]; if (_finish) _finish(); } @end
Demo下载链接:http://code.cocoachina.com/view/137011。
写博客的初心是希望大家共同交流成长,博主水平有限难免有偏颇之处,欢迎批评指正。
-
vue 新手引导页功能
2019-06-03 01:50:59背景:项目中 需要添加 新手引导页功能,效果如下图:解决方法:vue + vue-intro + intro.js1.安装依赖npm i vue-introjs npm i intro.js复制代码2.修改 webpack 文件 在 webpack.dev.conf.js webpack.prod.conf.js... -
IOS项目新手引导页图片适配方案
2021-06-11 18:02:381. 背景基本上每个IOS APP都会有新手引导页面这个功能,常规的就是几张静态图片,可以左右滚动。既然涉及到图片,就肯定会存在适配的问题(为了达到最优的体验效果,一般都会针对不同的分辨率设计不同尺寸的图片),... -
ios新手引导页(oc 和swift)
2018-10-23 18:18:19在第一次安装App, 或者更新App的时候, 常常会出现一个引导界面, 昨天晚上花了点时间, 写了个引导页,太晚就没发出来, 实现一个引导页其实并不困难. 请看代码 点我下载Swift的Demo 点我下载OC的demo 我们用... -
新手引导页
2016-10-18 15:42:09在项目中我们经常会看到下载的应用第一进入或者更新之后再进来时会看到对本应用的一些介绍及使用,这就是新手引导,下面我们简单的实现新手引导页面; 1.创建一个继承UIWindow的类目命名为 UIWindow+Extension,... -
微信小程序的引导页实现代码
2020-10-15 04:38:08主要介绍了微信小程序的引导页实现代码,需要的朋友可以参考下 -
GuideView Android新手引导页
2018-04-27 13:04:54转自:http://p.codekk.com/detail/Android/llxdaxia/GuideView把GuideView下的guideview包...GuideView项目地址:llxdaxia/GuideView 简介:Android 引导页,可定制性强更多:作者 提 Bug 示例 APK 标签:And... -
iOS 新手引导页面
2016-02-25 10:28:36最近公司让添加新手引导界面,在网上没找到合适的三方库,索性自己写了一个,效果图如下, 使用最简单的控件所写,简单易用易拓展,希望大家能够喜欢 源码链接如下 ,欢迎下载mark 点击打开链接 -
仿85同城的超酷的手势滑动新手引导页
2014-09-10 15:08:09仿85同城的超酷的手势滑动新手引导页 -
Swift--新手引导页之记录是否是第一次进来
2019-10-18 11:12:48在你的应用第一次进来的时候显示新手引导图片,其他时候再进来不会显示(除非删除重装),这样就需要在你对应的页面viewDidLoad方法中判断该控制器是否是第一次进来,进而决定引导页的显示与否,代码如下,仅做自己... -
基于ViewPager实现的新手引导页(带按钮)
2015-11-10 18:28:48基于ViewPager实现的新手引导页(最后一页带按钮) -
ios-HcdGuideView引导页-通过简单的方法给app加入引导页面.zip
2019-07-11 19:40:25快速简单的给你的app加入引导页。 只需要传入几张引导页面图片即可,在您的app的根页面的viewDidLoad中添加如下代码即可: NSMutableArray *images = [NSMutableArray new];[images addObject:[UIImage ... -
IOS中新手引导页面的实现(新手引导,Guide)
2020-12-24 19:49:541.由于项目的需要,我今天学习了新手的引导,接下我来说下新手引导的使用方法:(在程序中运行一次)接下来是实现代码:在AppDelegate.m 的代码:- (BOOL)application:(UIApplication *)application ...(NSDictionary *)...