IOS 基础开发之 UIScrollView的使用
2013-03-26 16:18
483 查看
UIScrollView 是我们在项目开发过程中,经常会用到的控件。
1、初始化
这里还可以更加需要设置delegate设置为self。
2、常用属性
。。。。
3、结合 UIPageControl 做页面滚动效果
首先应该设置如下:
在.h文件中
在.m文件中
4、图片的缩放
首先,预定义:
初始化如下:
手势、回调方法如下:
参考:http://www.2cto.com/kf/201111/112631.html
1、初始化
//init UIScrollView *scrollView = [[UIScrollView alloc] init]; [scrollView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; [self.view addSubview:scrollView]; [scrollView release];
这里还可以更加需要设置delegate设置为self。
2、常用属性
scrollView.pagingEnabled = YES; scrollView.showsHorizontalScrollIndicator = YES; scrollView.showsVerticalScrollIndicator = YES; scrollView.zoomScale = 2.0f; scrollView.pagingEnabled = YES; scrollView.contentOffset = CGPointMake(0, 0); scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height);
。。。。
3、结合 UIPageControl 做页面滚动效果
首先应该设置如下:
scrollView.pagingEnabled = YES; scrollView.delegate = self;
在.h文件中
@interface scrollViewViewController : UIViewController<UIScrollViewDelegate> { NSTimer *myTimer; } @property (retain, nonatomic) UIPageControl *myPageControl; @property (retain, nonatomic) UIScrollView *adsScrollView; @end
在.m文件中
#import "scrollViewViewController.h"
@interface scrollViewViewController ()
@end
@implementation scrollViewViewController
@synthesize myPageControl,adsScrollView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
myTimer=[NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(scrollToNextPage:) userInfo:nil repeats:YES];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)initMyScrollView
{
//init UIScrollView *scrollView = [[UIScrollView alloc] init]; [scrollView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; [self.view addSubview:scrollView]; [scrollView release];
//add label
UILabel *showTxt = [[UILabel alloc] init];
[showTxt setFrame:CGRectMake(20, 20, scrollView.frame.size.width - 40, scrollView.frame.size.height - 40)];
showTxt.backgroundColor = [UIColor clearColor];
showTxt.text = @"add label";
[scrollView addSubview:showTxt];
[showTxt release];
scrollView.pagingEnabled = YES; scrollView.delegate = self;
myPageControl = [[UIPageControl alloc] init];
[myPageControl setFrame:CGRectMake(0, 200, self.view.frame.size.width, self.view.frame.size.height)];
[myPageControl addTarget:self action:@selector(pageValueChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:myPageControl];
}
-(void)scrollToNextPage:(id)sender
{
int pageNum = myPageControl.currentPage;
if (pageNum == 4) {
pageNum = -1;
}
[adsScrollView setContentOffset:CGPointMake(adsScrollView.frame.size.width * (pageNum + 1), 0) animated:YES];
}
- (void)pageValueChanged:(id)sender {
[adsScrollView setContentOffset:CGPointMake(adsScrollView.frame.size.width * myPageControl.currentPage, 0) animated:YES];
}
#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat pageWidth=self.myPageControl.frame.size.width;
int currentPage = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
self.myPageControl.currentPage = currentPage;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
myTimer=[NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(scrollToNextPage:) userInfo:nil repeats:YES];
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
[myTimer invalidate];
}
-(void)dealloc{
[super dealloc];
[myPageControl release];
[adsScrollView release];
}
@end
4、图片的缩放
首先,预定义:
#define ZOOM_VIEW_TAG 200 #define ZOOM_STEP 2.0
初始化如下:
[scenicImgView setTag:ZOOM_VIEW_TAG]; UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTap:)]; [doubleTap setNumberOfTapsRequired:2]; [twoFingerTap setNumberOfTouchesRequired:2]; [scenicImgView addGestureRecognizer:singleTap]; [scenicImgView addGestureRecognizer:doubleTap]; [scenicImgView addGestureRecognizer:twoFingerTap]; [singleTap release]; [doubleTap release]; [twoFingerTap release]; float minimumScale = [myScrollView frame].size.width / [scenicImgView frame].size.width; [myScrollView setMinimumZoomScale:minimumScale]; [myScrollView setMaximumZoomScale:1.0]; [myScrollView setZoomScale:minimumScale];
手势、回调方法如下:
#pragma mark UIScrollViewDelegate methods - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return [myScrollView viewWithTag:ZOOM_VIEW_TAG]; } - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { [scrollView setZoomScale:scale+0.01 animated:NO]; [scrollView setZoomScale:scale animated:NO]; } #pragma mark TapDetectingImageViewDelegate methods - (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer { // single tap does nothing for now } - (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer { // double tap zooms in float newScale = [myScrollView zoomScale] * ZOOM_STEP; CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]]; [myScrollView zoomToRect:zoomRect animated:YES]; } - (void)handleTwoFingerTap:(UIGestureRecognizer *)gestureRecognizer { // two-finger tap zooms out float newScale = [myScrollView zoomScale] / ZOOM_STEP; CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]]; [myScrollView zoomToRect:zoomRect animated:YES]; } #pragma mark Utility methods - (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center { CGRect zoomRect; zoomRect.size.height = [myScrollView frame].size.height / scale; zoomRect.size.width = [myScrollView frame].size.width / scale; // choose an origin so as to get the right center. zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0); zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0); return zoomRect; }
参考:http://www.2cto.com/kf/201111/112631.html
相关文章推荐
- IOS开发基础—uiscrollview的基本使用
- ioS开发之UI基础--UIScrollView的基本使用
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换2,使用导航栏控制,以及视图之间传值。
- iOS开发:UISCrollView与UITableView嵌套使用终极解决方案
- IOS开发基础—UITableView的基本使用。
- ios开发基础--滚动视图(UIScrollView)
- IOS开发基础—通过Tom猫实例学习uiimageview的基本使用
- iOS应用开发中使用UIScrollView控件来实现图片缩放
- iOS开发之基础视图—UIScrollView
- IOS开发UI控件<UIScrollView>和Delegate的使用
- iOS开发UI基础—17UIScrollView控件实现图片缩放功能
- iOS开发UI基础—29UIScrollView控件实现图片轮播
- iOS开发UIScrollView使用详解
- [置顶] Objective-C ,ios,iphone开发基础:UIAlertView使用详解
- IOS开发~UISCrollView与UITableView嵌套使用终极解决方案
- iOS开发UI篇—UIScrollView控件简单使用
- iOS开发-UI (十)UIScrollView 和 UIPageControl使用
- iOS开发基础- UIScrollView
- [ios开发基础之 Core Data[3]]如何使用NSFetchedResultsController 来集成TableView操作
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换,以及视图之间传值。使用parent <->dismiss