ios引导页尺寸
发布时间: 2024-08-07 17:17:05
1. ios开发有没有自己封装过控件
初学了UIScrollView的分页的功能,只能说iOS中UIScrollView这玩意儿功能太强了,除了有类似于android中的scrollview的功能,还有Viewpager的功能,比如做app引导页、图片轮播器等,android中一般用viewpager来做,iOS却可以用UIScrollView来做,而且实现起来比android要简单。
封装后的好处就是,在ViewController中只需要创建一个自定义的View对象,设置好尺寸图片以及相应的颜色并把她添加到父控件中,就能正常使用了。。也就是说,要把UIScrollView和UIPageControl的初始化、设置数据,分页,设置属性等等相应的操作都在我自定义的View类中进行。在头文件中提供一些接口供外部去使用,而不暴露内部实现。
还是和之前一样,创建好xib文件,自定义的view类,在xib中放UIScrollView和UIPageControl,修改xib中的View的class,定义属性、构造方法,重写setter方法,监听UIScrollView的滚动。。。。balabala
XXPageView.h
//
//XXPageView.h
//UIScrollView的简单封装
//
//CreatedbyDanielon16/3/6.
//Copyright©2016年Daniel.Allrightsreserved.
//
#import<UIKit/UIKit.h>
@interfaceXXPageView:UIView
+(instancetype)pageView;
/**图片名字*/
@property(nonatomic,strong)NSArray*imageNames;
/**UIPageControl当前圆点的颜色*/
@property(nonatomic,strong)UIColor*currentColor;
/**UIPageControl其他圆点的颜色*/
@property(nonatomic,strong)UIColor*otherColor;
@end
XXPageView.m
//
//XXPageView.m
//UIScrollView的简单封装
//
//CreatedbyDanielon16/3/6.
//Copyright©2016年Daniel.Allrightsreserved.
//
#import"XXPageView.h"
@interfaceXXPageView()<UIScrollViewDelegate>
/**这里的属性以及scrollview的代理我都是用拖线的方式来的*/
@property(weak,nonatomic)IBOutletUIScrollView*scrollView;
@property(weak,nonatomic)IBOutletUIPageControl*pageControl;
@end
@implementationXXPageView
+(instancetype)pageView{
//加载xib
return[[[NSBundlemainBundle]loadNibNamed:NSStringFromClass(self)owner:niloptions:nil]lastObject];
}
-(void)layoutSubviews
{
[superlayoutSubviews];
//这些设置尺寸应该可以用autoLayout来搞吧,现在还不会用autoLayout,后面再来优化
//设置scrollView的frame
self.scrollView.frame=self.bounds;
//获得scrollview的尺寸
CGFloatscrollW=self.scrollView.frame.size.width;
CGFloatscrollH=self.scrollView.frame.size.height;
//设置pageControl
CGFloatpageW=100;
CGFloatpageH=20;
CGFloatpageX=scrollW-pageW;
CGFloatpageY=scrollH-pageH;
self.pageControl.frame=CGRectMake(pageX,pageY,pageW,pageH);
//设置内容大小
self.scrollView.contentSize=CGSizeMake(self.imageNames.count*scrollW,0);
//设置所有imageView的frame
for(inti=0;i<self.scrollView.subviews.count;i++){
UIImageView*imageView=self.scrollView.subviews[i];
imageView.frame=CGRectMake(i*scrollW,0,scrollW,scrollH);
}
}
#pragmamark-setter方法重写
-(void)setImageNames:(NSArray*)imageNames{
_imageNames=imageNames;
//先移除之前所有的imageview
//makeObjectsPerformSelector让所有的objects都执行某个方法
[self.scrollView.:@selector(removeFromSuperview)];
//根据图片名创建对应的imageView并添加到UIScrollView中
for(inti=0;i<imageNames.count;i++){
UIImageView*imageView=[[UIImageViewalloc]init];
imageView.image=[UIImageimageNamed:imageNames[i]];
[self.scrollViewaddSubview:imageView];
}
//开启分页功能,也可以在xib中设置
//self.scrollView.pagingEnabled=YES;
//设置总页数
self.pageControl.numberOfPages=imageNames.count;
//当只有一个控件时隐藏pageControl
//这句代码也可以在xib文件中设置
//self.pageControl.hidesForSinglePage=YES;
//这种方法也可以
//self.pageControl.hidden=imageNames.count<=1;
}
/**设置当前圆点的颜色*/
-(void)setCurrentColor:(UIColor*)currentColor{
_currentColor=currentColor;
self.pageControl.currentPageIndicatorTintColor=currentColor;
}
/**设置其他圆点的颜色*/
-(void)setOtherColor:(UIColor*)otherColor{
_otherColor=otherColor;
self.pageControl.pageIndicatorTintColor=otherColor;
}
#pragmamark-<UIScrollViewDelegate>
-(void)scrollViewDidScroll:(UIScrollView*)scrollView{
self.pageControl.currentPage=(int)(scrollView.contentOffset.x/scrollView.frame.size.width+0.5);
}
@end
<补充start>
这种图片轮播一般都是可以拖拽滑动,也可以定时滑动的,现在给她加一个定时器,还是监听UIScrollView的滚动,对scrollViewWillBeginDragging方法和scrollViewDidEndDragging方法重写,去控制定时器的开关,定时器中间隔多长时间后执行跳转到下一页的方法即可。
-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
[selfstopTimer];
}
-(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate{
[selfstartTimer];
}
#pragmamark-定时器控制
-(void)startTimer{
//创建一个定时器
self.timer=[:1.5target:selfselector:@selector(nextPage)userInfo:nilrepeats:YES];
//解决当同界面的其他控件滚动时,定时器失效的问题
[[NSRunLoopmainRunLoop]addTimer:self.timerforMode:NSRunLoopCommonModes];
}
-(void)stopTimer{
[self.timerinvalidate];
self.timer=nil;
}
//滚动到下一页
-(void)nextPage{
NSIntegerpage=self.pageControl.currentPage+1;
if(page==self.pageControl.numberOfPages){
page=0;
}
CGPointoffset=self.scrollView.contentOffset;
offset.x=page*self.scrollView.frame.size.width;
[self.scrollViewsetContentOffset:offsetanimated:YES];
}
还有,加载xib的方式中,xib或者storyboard中的控价创建完之后,会调用awakeFromNib这个方法,所以初始化完之后在该方法中开启定时器即可。
/**当控件从xibstoryboard中创建完毕时,就会调用这个方法,创建完毕后的初始化操作,在这个方法中执行*/
-(void)awakeFromNib{
[selfsetup];
}
/**初始化代码*/
-(void)setup{
//开启定时器
[selfstartTimer];
}
<补充end>
XXPageView.xib
也可以在代码中设置
设置XXPageView为UIScrollView的代理
最后在ViewController中调用
//
//ViewController.m
//UIScrollView分页控件的简单封装
//
//CreatedbyDanielon16/3/6.
//Copyright©2016年Daniel.Allrightsreserved.
//
#import"ViewController.h"
#import"XXPageView.h"
@implementationViewController
-(void)viewDidLoad{
[superviewDidLoad];
//直接创建一个XXPageView
XXPageView*pageView=[XXPageViewpageView];
//设置frame
pageView.frame=CGRectMake(37,50,300,200);
//设置图片内容
pageView.imageNames=@[@"img_00",@"img_01",@"img_02",@"img_03",@"img_04"];
//设置pageControl相应的颜色
pageView.currentColor=[UIColororangeColor];
pageView.otherColor=[UIColorgrayColor];
[self.viewaddSubview:pageView];
}
@end
2. ios中怎么定义数组常量
涉及到了运行时。
除了NSString类型之外,都不允许在方法外部声明一个‘静态全局常量类型的OC对象’。
你声明的static const NSArray *imgArr 在‘编译’的时候系统并不知道imgArr是什么类型,PS:全局常量类型的常量,static const是系统在编译的时候就需要确定你所定义的常量是什么类型的,然而OC的对象的类型是在‘运行时’确定的。与基本数据类型的确定时间不同,由编译的时候推到了运行时(OC支持多态的原因)。
但是NSString除外,NSString是一种特殊的数据类型,有特殊的存储结构和权限来保证系统能够识别。
如果你想再深入理解的话,需要对OC的运行时机制学习学习。
可以这样:
static NSString const *imgArr[3] = {
@"引导页1",
@"引导页2",
@"引导页3"
};
3. ios开发怎么才能让首次启动页显示在引导页前面
首次启动页,第一次启动才出现的页面;引导页,也是首次启动引导用户的吧,两个是一个意思
如果你说的引导页是启动图也就是LuanchImage的话,除非自定义一个viewcontroller代替启动图,让它在你需要的时候出现,这样的弊端是启动时屏幕要黑一下
4. iOS 应用的登录页面和引导页顺序谁在前谁在后比较好为什么
当然是引导页啦😄,我说下我的做法,我一般会把引导页面添加到keywindow上,这样比较容易操作