- 浏览: 2527658 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
本文实现的自定义UIScrollView可以上下拉动,下拉显示前一条记录,上拉显示后一条记录,这里并未给出具体的实现代码,本文中的代码只是使用示例,具体的实现请参考附件。
DetailViewController.h
#import "VerticalSwipeScrollView.h" @interface DetailViewController : UIViewController <VerticalSwipeScrollViewDelegate, UIScrollViewDelegate> { IBOutlet UIView* headerView; IBOutlet UIImageView* headerImageView; IBOutlet UILabel* headerLabel; IBOutlet UIView* footerView; IBOutlet UIImageView* footerImageView; IBOutlet UILabel* footerLabel; VerticalSwipeScrollView* verticalSwipeScrollView; NSArray* appData; NSUInteger startIndex; UIWebView* previousPage; UIWebView* nextPage; } @property (nonatomic, retain) IBOutlet UIView* headerView; @property (nonatomic, retain) IBOutlet UIImageView* headerImageView; @property (nonatomic, retain) IBOutlet UILabel* headerLabel; @property (nonatomic, retain) IBOutlet UIView* footerView; @property (nonatomic, retain) IBOutlet UIImageView* footerImageView; @property (nonatomic, retain) IBOutlet UILabel* footerLabel; @property (nonatomic, retain) VerticalSwipeScrollView* verticalSwipeScrollView; @property (nonatomic, retain) NSArray* appData; @property (nonatomic) NSUInteger startIndex; @property (nonatomic, retain) UIWebView* previousPage; @property (nonatomic, retain) UIWebView* nextPage; @end
DetailViewController.m
#import "DetailViewController.h" CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;}; CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;}; @interface DetailViewController (PrivateMethods) - (void)hideGradientBackground:(UIView *)theView; - (UIWebView *)createWebViewForIndex:(NSUInteger)index; @end @implementation DetailViewController @synthesize headerView, headerImageView, headerLabel; @synthesize footerView, footerImageView, footerLabel; @synthesize verticalSwipeScrollView, appData, startIndex; @synthesize previousPage, nextPage; - (void)viewDidLoad { headerImageView.transform = CGAffineTransformMakeRotation(DegreesToRadians(180)); } - (void)willAppearIn:(UINavigationController *)navigationController { self.verticalSwipeScrollView = [[[VerticalSwipeScrollView alloc] initWithFrame:self.view.frame headerView:headerView footerView:footerView startingAt:startIndex delegate:self] autorelease]; [self.view addSubview:verticalSwipeScrollView]; } - (void) rotateImageView:(UIImageView *)imageView angle:(CGFloat)angle { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; imageView.transform = CGAffineTransformMakeRotation(DegreesToRadians(angle)); [UIView commitAnimations]; } # pragma mark VerticalSwipeScrollViewDelegate - (void) headerLoadedInScrollView:(VerticalSwipeScrollView *)scrollView { [self rotateImageView:headerImageView angle:0]; } - (void) headerUnloadedInScrollView:(VerticalSwipeScrollView *)scrollView { [self rotateImageView:headerImageView angle:180]; } - (void) footerLoadedInScrollView:(VerticalSwipeScrollView *)scrollView { [self rotateImageView:footerImageView angle:180]; } - (void) footerUnloadedInScrollView:(VerticalSwipeScrollView *)scrollView { [self rotateImageView:footerImageView angle:0]; } - (UIView *) viewForScrollView:(VerticalSwipeScrollView *)scrollView atPage:(NSUInteger)page { UIWebView* webView = nil; if (page < scrollView.currentPageIndex) webView = [[previousPage retain] autorelease]; else if (page > scrollView.currentPageIndex) webView = [[nextPage retain] autorelease]; if (!webView) webView = [self createWebViewForIndex:page]; self.previousPage = page > 0 ? [self createWebViewForIndex:page-1] : nil; self.nextPage = (page == (appData.count-1)) ? nil : [self createWebViewForIndex:page+1]; self.navigationItem.title = [[[appData objectAtIndex:page] objectForKey:@"im:name"] objectForKey:@"label"]; if (page > 0) headerLabel.text = [[[appData objectAtIndex:page-1] objectForKey:@"im:name"] objectForKey:@"label"]; if (page != appData.count-1) footerLabel.text = [[[appData objectAtIndex:page+1] objectForKey:@"im:name"] objectForKey:@"label"]; return webView; } - (NSUInteger) pageCount { return appData.count; } - (UIWebView *) createWebViewForIndex:(NSUInteger)index { UIWebView* webView = [[[UIWebView alloc] initWithFrame:self.view.frame] autorelease]; webView.opaque = NO; [webView setBackgroundColor:[UIColor clearColor]]; [self hideGradientBackground:webView]; NSString* htmlFile = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/DetailView.html"]; NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; htmlString = [htmlString stringByReplacingOccurrencesOfString:@"<!-- title -->" withString:[[[appData objectAtIndex:index] objectForKey:@"im:name"] objectForKey:@"label"]]; htmlString = [htmlString stringByReplacingOccurrencesOfString:@"<!-- icon -->" withString:[[[[appData objectAtIndex:index] objectForKey:@"im:image"] objectAtIndex:0] objectForKey:@"label"]]; htmlString = [htmlString stringByReplacingOccurrencesOfString:@"<!-- content -->" withString:[[[appData objectAtIndex:index] objectForKey:@"summary"] objectForKey:@"label"]]; [webView loadHTMLString:htmlString baseURL:nil]; return webView; } - (void) hideGradientBackground:(UIView *)theView { for (UIView *subview in theView.subviews) { if ([subview isKindOfClass:[UIImageView class]]) subview.hidden = YES; [self hideGradientBackground:subview]; } } - (void)viewDidUnload { self.headerView = nil; self.headerImageView = nil; self.headerLabel = nil; self.footerView = nil; self.footerImageView = nil; self.footerLabel = nil; } - (void)dealloc { [headerView release]; [headerImageView release]; [headerLabel release]; [footerView release]; [footerImageView release]; [footerLabel release]; [verticalSwipeScrollView release]; [appData release]; [previousPage release]; [nextPage release]; [super dealloc]; } @end
- VerticalSwipeArticles.zip (80.5 KB)
- 下载次数: 24
发表评论
-
Error watching file for changes: EMFILE
2016-12-15 11:57 1299执行npm start后报错: Error watc ... -
CocoaPods升级1.1.1报错
2016-12-15 08:39 793ERROR: While executing gem .. ... -
Visual Studio Code运行React Native报错
2016-06-13 09:43 1612React Native:0.27.2 React:15 ... -
React Native 0.27.2编译报错this._nativeModule.addListener is not a function
2016-06-12 15:21 3854React Native:0.27.2 React:15 ... -
Unable to resolve module ReactDefaultPerf from
2016-06-02 13:04 2782package.json信息如下: "reac ... -
React Native 0.26.2编译报错Undefined symbols for architecture x86_64
2016-05-26 11:15 2014React Native:0.26.2 React:15. ... -
Failed to update auto layout status: Failed to load designables from path (null)
2016-04-05 22:11 1714确保CocoaPods是0.36.1以上版本,然后在podf ... -
集成微信支付出现Undefined symbols for architecture x86_64错误
2016-03-21 13:22 1751Undefined symbols for architec ... -
React Native热部署之CodePush
2016-01-10 22:27 6239本文使用的环境是Mac OS 10.11.1、Xcode ... -
浅谈React Native中的FlexBox布局
2015-11-17 18:38 4304React Native通过一个基于FlexBox的布局引 ... -
React Native之构建一个简单的列表页
2015-10-23 14:45 2160本文中我们将创建一个简单的电影应用,这个应用将从Rotten ... -
React Native之环境搭建
2015-10-20 16:30 1445本文使用的环境是Mac O ... -
获取图片属性的方法
2015-10-18 20:43 3143很多时候我们需要获 ... -
NSCache的下标用法
2015-09-18 00:19 1213NSCache类和NSDictionary类很相似,也提供 ... -
如何给category添加属性
2015-08-16 10:41 690主要是使用了runtime中的associative机制。 ... -
UITableView的两种重用Cell方法的区别
2015-08-10 13:07 16145UITableView中有两种重用Cell的方法: - ... -
SDImageCache.m报错Unused variable 'fileName'
2015-08-04 21:56 1172GCC手册中的相关解释: unused:This att ... -
Swift调用Objective-C
2015-07-13 23:33 1224Swift调用Objective-C需要一个名为<工程 ... -
使用GCD实现倒计时
2015-07-24 21:47 1083__block int timeout = 60; // ... -
导航栏加分割线的实现
2015-07-01 22:00 1761self.view.backgroundColor = [U ...
相关推荐
MMScrollPresenter, 用于分页UIViews的iOS自定义UIScrollView控件 MMScrollPresenter 描述MMScrollPresenter是用于iOS开发的控件,它接受MMScrollPages的array 并显示在你的UIScrollView中。我最初是在命运应用中的...
iOS自定义UIScrollView的滚动条实例代码 iOS开发中,UIScrollView是一个非常常用的控件,经常用来实现滚动列表、图片浏览等功能。默认情况下,UIScrollView具有一个滚动条,但是这个滚动条的样式和行为可能不能满足...
TRSD拨号滚动视图 这是我用于我的一个应用程序的自定义 UIScrollView。 这是一个可定制的拨号控件,可满足您所有控件显示需求。 包括通过 UIAppearance 对所有主要属性进行自定义。去做仍然需要添加对 AutoLayout 的...
当用户尝试将 UIScrollView 滚动到滚动视图内容之外时,可以使用 Bounce Scroll View 自定义 UIScrollView 的外观 有两种选择 滚动限制 其中滚动视图将在内容大小 2 之外的所需偏移处停止。阻力比 其中滚动视图将...
本示例“ios-UIScrollView分页滑动宽度自定义.zip”专注于讲解如何自定义UIScrollView的分页滑动宽度,以实现更灵活、个性化的用户界面。这通常涉及到的内容包括UIScrollView的基本使用、pagingEnabled属性的设置...
综上所述,通过自定义UIScrollView,我们可以实现一个类似UITableView的无限循环列表。这种方式虽然比直接使用UITableView更复杂,但在某些场景下,如轮播图、无限滚动列表等,它能提供更大的灵活性和定制化空间。在...
这通常是通过自定义UIScrollView的行为来实现的。开发者可能通过监听滑动手势的细节,比如滑动速度和方向,判断是否达到页面边缘。一旦到达边界,可以动态地添加或者显示预先设计好的箭头和文字视图。这些视图可能是...
总的来说,这个“ios-十字形滑动”项目提供了一种简单的方法来实现微博个人主页那样的交互体验,通过自定义UIScrollView子类,避免了视图层次过深的问题,提高了代码的可读性和维护性。开发者可以通过研究这个项目,...
CustomScrollIndicator, iOS自定义ScrollIView指示器 iOS可以定制的ScrollIndicator 允许自定义UIScrollView滚动指示器,只有一个类别 enum-配置指示器位置typedef enum { JMOVerticalSc
在实际项目中,我们经常需要自定义UIScrollView的行为,比如实现无限轮播的效果。这通常需要配合使用UICollectionView或者UIPageControl来完成。通过合理配置contentSize和contentOffset,我们可以让滚动视图在达到...
本主题聚焦于如何利用自定义UIScrollView实现图片的放大缩小功能,并且支持动态滑动,使得用户在查看图片时可以自由浏览图片的各个部分。在iOS中,UIImageView通常用于显示静态图片,但若要实现缩放和滑动功能,我们...
要实现滑动间距小于屏幕宽度的效果,我们需要自定义UIScrollView的行为。我们可以通过重写`setContentOffset:animated:`方法来控制ScrollView的滑动位置。这个方法用于设置ScrollView的内容偏移量,即滚动到的位置。...
总的来说,"IndicatorViewDemo"是一个关于自定义UIScrollView指示器的实践案例,它涉及到iOS开发中的多个重要知识点,包括自定义视图、UIScrollView的使用、事件处理以及视图的布局和动画。对于想要提升iOS UI开发...
2. **自定义UIScrollView**: - 对于更复杂的需求,开发者可能选择自定义`UIScrollView`。通过设置`contentSize`属性来定义可滚动的区域大小,然后添加多个子视图(每个子视图代表一个页面)到`UIScrollView`上。 ...
自定义UIScrollView实现全屏滑动显示不同控制器的LBPScrollSegmentView 封装网络访问类AFNetPackage,具备检查网络状态、JSON方式获取数据、xml方式获取数据、post、get、delete、文件下载、文件上传等功能 ...
本篇将深入探讨如何实现"scrollView滑动页面",特别是自定义UIScrollView以满足特定需求。 首先,我们要了解UIScrollView的基本使用。在Storyboard中,我们可以直接添加UIScrollView,并将其约束设置为充满父视图。...
在咕咚运动App的案例中,开发者可能通过自定义UIScrollView来实现环形滚动的视觉效果,这需要对UIScrollView的contentSize、contentOffset、decelerationRate等属性有深入理解,并且需要处理好内容的循环显示。...
然后,为了实现不同的滑动速度,你需要自定义UIScrollView的滚动行为。这可以通过重写UIScrollView的代理方法,如`- (void)scrollViewDidScroll:(UIScrollView *)scrollView`来实现。在这个方法中,你可以根据当前的...