iOS7开发学习之路:No.9: 引导页之三&内存释放

简介:

之前的两篇Blog介绍了两种不同的引导页的编写方法,但是都各自有各自的缺点:利用scrollView(http://blog.csdn.net/u011156012/article/details/37592445)没有加入可以显示当前页面位置的navigation;如果直接使用PageViewController(http://blog.csdn.net/u011156012/article/details/37739205)的话,默认的屏幕下方的空白区域又显得很扎眼,所以想要改进的话,最终还是采用ScrollView+PageControl的方法来实现。

其实这种方法是在第一种方法上的改进而已,依然是利用ScrollView来实现,不过加上了PageControll而已。

在初始化scrollview的时候也同时初始化pagecontroll

pageControl = [[UIPageControl alloc] init];
    pageControl.frame=CGRectMake(110, 400, 100, 30) ;
    pageControl.numberOfPages = 4; // 一共显示多少个圆点(多少页)
    // 设置非选中页的圆点颜色
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    // 设置选中页的圆点颜色
    pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
    // 禁止默认的点击功能
    pageControl.enabled = NO;
    pageControl.backgroundColor=[UIColor  clearColor];
    [self.view addSubview:pageControl];

同时在头文件里面加入对ScrollView的代理 < UIScrollViewDelegate >

同时在下面两个方法里面修改对pagecontroll

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //更新UIPageControl的当前页
    CGPoint offset = scrollView.contentOffset;
    CGRect bounds = scrollView.frame;
    [pageControl setCurrentPage:offset.x / bounds.size.width];
}

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat pageWidth = self.view.frame.size.width;
    // 在滚动超过页面宽度的50%的时候,切换到新的页面
    int page = floor((scrollView.contentOffset.x + pageWidth/2)/pageWidth) ;
    pageControl.currentPage = page;
}

很简单,这样就ok了。


内存释放

之前开发过程中,总是用在StoryBoard中拖拽进控件的方式来设置页面,这样设计的好处是可以很直观地看到页面的效果,但是缺点是如果所有控件都提前布置好了,容易造成很多内存的浪费,例如有些控件并不需要一直存在,只在需要的时候new一个,然后使用完成后release就好了。这些在MRC时候很容易实现,可是现在iOS的开发都使用ARC了,之前一篇Blog也学习了ARC的一些基础知识,就是在一个对象没有strong类型的指针指向时,它就会自动释放了。下面介绍下如何在程序中手动释放内存。

例如我们手动alloc了一个datepicker

//init the datepicker
    _TheDatePicker= [[UIDatePicker alloc]initWithFrame:CGRectMake(0,self.view.frame.size.height*1/2+5, 0, 0)];
    _TheDatePicker.datePickerMode = UIDatePickerModeDate;
    _TheDatePicker.date = _pickedDate;
    [_TheDatePicker setBackgroundColor:[UIColor whiteColor]];
    [self.view addSubview:_TheDatePicker];

_TheDatePicker是一个私有变量,默认是strong类型的。当我们使用Datepicker选择完成之后,我们需要把他释放掉,因为可能用户之后再也不需要它了,而如果仅仅使用_TheDatePicker setHidden 方法,没法把内存释放掉,释放内存的方法是下面两行函数:

[_TheDatePicker removeFromSuperview];
_TheDatePicker = nil;

不得不提下不知道是不是Xcode5.1的一个bug?就是如果我们事前在storyboard上拖拽进去一个控件,如果我们想在程序中手动改变它的位置,控件的大小必须和之前设置的一致。

就是在我们调用frame = CGRectMaker();里面的4个参数的时候,前面表示x,y坐标的可以改变,但是后面表示width和height的两个值必须和你在storyboard中拖拽进去的值保持一致。否则这个控件的frame是不会改变的。

 

< UIScrollViewDelegate >
目录
相关文章
|
29天前
|
安全 程序员 编译器
动态内存管理学习分享
动态内存管理学习分享
45 0
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
88 3
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
39 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
93 2
|
3月前
|
API 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
iOS 开发高效率工具包:10 大必备工具
48 1
|
8天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
12 0
|
23天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
29天前
|
缓存 Java Android开发
安卓应用开发中的内存优化策略
在移动应用开发领域,性能一直是衡量应用质量的重要指标之一。特别是对于安卓平台,由于设备的硬件配置多样化,内存管理成为开发者面临的重大挑战。本文将深入探讨针对安卓平台的内存优化技巧,包括内存泄漏的预防、合理使用数据结构和算法、以及高效的资源释放机制。通过这些方法,开发者可以显著提升应用的性能和用户体验。
|
1月前
|
监控 算法 Android开发
安卓应用开发中的内存优化策略
【2月更文挑战第30天】随着移动设备性能的不断提升,用户对应用程序的体验要求越来越高。在安卓应用开发中,内存管理是影响应用性能和用户体验的关键因素之一。本文将探讨针对安卓平台的内存优化技巧,包括避免内存泄漏、合理使用数据结构和算法、优化图片资源处理等策略,旨在帮助开发者提升应用性能和稳定性。
19 1

热门文章

最新文章