IOS 怎么用uiscrollview上下滚动来滚动和缩放他的内容第一篇

rainbownight 的BLOG
用户名:rainbownight
文章数:27
访问量:41730
注册日期:
阅读量:5863
阅读量:12276
阅读量:360090
阅读量:1056002
51CTO推荐博文
用来做一些横向展示图片的功能很合适。只能横向使用(纵向直接用UITableView好了)用法仿造UITableView的写法来写的。所以用起来感觉很“亲切”。如果有bug烦请告知: github:&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)IOS设计模式第十篇之命令行设计模式
命令行设计模式:
命令设计模式将一个请求或行动作封装为对象。这个封装请求比原始的请求要灵活并且可以在对象之前被传递,存储,动态修改或者放进队列里面。苹果
苹果公司实现这种模式使用Target-Action机制和Invocation。
你可以更多关于Target-Action机制在苹果的文档但是Invocation类可以包含一个目标对象,方法选择器和一些参数。当需要的时候这个对象可以被动态的改变。
这是一个完美的命令模式的例子。它将发送对象从接收对象和对象和可以持续请求或一连串的请求。
怎么使用命令设计模式?
在你进入invocation 操作之前。你需要设置framework来支持撤销操作。你必须定义一个UIToolBar 和NSMutableArray 来作为撤销栈。
在Viewcontroller实现文件延展里添加其他的实例变量:
UIToolbar *
// We will use this array as a stack to push and pop operation for the undo option
NSMutableArray *undoS
创建一个toolbar 来展示按钮和新的操作。以及一个数组作为命令队列。
添加下面代码在ViewDidLoad:
toolbar = [[UIToolbar alloc] init];
& & UIBarButtonItem *undoItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemUndo target:self action:@selector(undoAction)];
& & undoItem.enabled = NO;
& & UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
& & UIBarButtonItem *delete = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(deleteAlbum)];
& & [toolbar setItems:@[undoItem,space,delete]];
& & [self.view addSubview:toolbar];
& & undoStack = [[NSMutableArray alloc] init];
上面代码创建一个toolbar带两个按钮和在他们之间添加一个灵活的空间。它还创建一个空撤销堆栈。这里的撤销按钮被禁用,因为撤销堆栈开始空了。
注意,工具栏没有用坐标初始化,由于在ViewDidLoad设置的坐标大小不是最终的。因此最后的设置通过下面代码:
- (void)viewWillLayoutSubviews
& & toolbar.frame = CGRectMake(0, self.view.frame.size.height-44, self.view.frame.size.width, 44);
& & dataTable.frame = CGRectMake(0, 130, self.view.frame.size.width, self.view.frame.size.height - 200);
您将添加三个ViewController方法。m处理专辑管理操作:添加、删除和撤销。
第一个方法用来添加新专辑
- (void)addAlbum:(Album*)album atIndex:(int)index
& & [[LibraryAPI sharedInstance] addAlbum:album atIndex:index];
& & currentAlbumIndex =
& & [self reloadScroller];
在这里你添加一个新专辑,并且设置为当前的索引,并且加载这个滑动视图。
下面是删除方法:
- (void)deleteAlbum
& & Album *deletedAlbum = allAlbums[currentAlbumIndex];
NSMethodSignature *sig = [self methodSignatureForSelector:@selector(addAlbum:atIndex:)];
NSInvocation *undoAction = [NSInvocation invocationWithMethodSignature:sig];
& & [undoAction setTarget:self];
& & [undoAction setSelector:@selector(addAlbum:atIndex:)];
& & [undoAction setArgument:&deletedAlbum atIndex:2];
& & [undoAction setArgument:&currentAlbumIndex atIndex:3];
& & [undoAction retainArguments];
& & [undoStack addObject:undoAction];
& & [[LibraryAPI sharedInstance] deleteAlbumAtIndex:currentAlbumIndex];
& & [self reloadScroller];
& & [toolbar.items[0] setEnabled:YES];
对上面做下解释:
1:让这张专辑删除
2:定义一个NSMethodSignature 类型为了创建NSInvocation。为了撤销删除操作。这个
NSInvocation需要知道三个事情:选择器(什么消息被发送),目标(谁发送这个消息)还有消息的参数。这个例子中一旦你撤销删除
他消息发送删除的相反您需要添加删除专辑。
3:撤销操作被创建后添加到空栈里面。这个操作被调价到数组的组后,就像正常的栈。
用libraryAPI来删除专辑从数据架构中并且加载滑动视图。
5:自撤销堆栈的操作,您需要启用撤销按钮
注意:对于NSInvocation你需要注意下面几点:
1:参数必须通过指针传递
2:参数从2的索引开始,指数0和1都保留在目标和选择器。
3:果有机会,参数将被收回,那么你应该叫retainArguments。
最后添加撤销操作:
- (void)undoAction
& & if (undoStack.count & 0)
NSInvocation *undoAction = [undoStack lastObject];
& & & & [undoStack removeLastObject];
& & & & [undoAction invoke];
& & if (undoStack.count == 0)
& & & & [toolbar.items[0] setEnabled:NO];
撤消操作&弹出&中的最后一个对象栈。这个对象总是NSInvocation类型,可以通过调用调用&调用。这张专辑删除时调用的命令很早被创建。并添加删除专辑专辑列表。因为你也删除最后一个对象在堆栈&弹出&时,你现在看看栈是空的。如果是,这就意味着没有更多的行动取消。所以你禁用撤销按钮。构建和运行您的应用程序来测试你的撤销机制,删除一个专辑(或两个),点击取消按钮看它的实际应用:
这也是一个不错的测试是否保留更改相册数据之间的会话。现在,如果你删除一个专辑,将应用程序发送到后台,然后终止应用程序,下次启动应用程序显示专辑列表应该反映删除。
分类: 设计模式
标签: IOS设计模式 IOS命令行设计模式 Objective-c设计模式
& 上一篇:IOS 怎么用UIScrollView来滚动和缩放他的内容第一篇
00:01 人魔七七 阅读(240) 评论(2) 编辑 收藏
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'&&&&实现两个两个效果,一个是仿照“过日子”进入子页效果,以及拖动UIScrollView放大图片效果。
&&&&小编注:感谢开发者@碳化熊_ 分享代码于Code4App。
测试环境:
&&[Code4App]编译测试
相关代码:
(14898次查看,3540次下载) 实现类似Path App中下拉列表时,放大列表顶部的图片以及产生parallax的效果。
(14236次查看,3475次下载) 向下拖动ScrollView时,ScrollView上方的图片会随着手指的拖动而放大并且变模糊。松开手指之后,图片随着ScrollView的回复原来位置而恢复原样。这种效果出现在Twitter App中。
(12926次查看,4176次下载) 实现拖动列表,列表头部的图片进行放大的效果。整个代码实现十分简单,不超过10行代码。
(22043次查看,6640次下载) 下拉列表或者ScrollView,放大顶部的图片。类似tweetbot app的个人页面效果。
代码评论:
登录后方可评论
太久了 建议下架
登录后方可评论
-控件分类-
-功能分类-}

我要回帖

更多关于 uiscrollview循环滚动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信