UI一揽子计划 7 ( UIScrollView、 UIPageControl、综合所学简单相册)

本文详细介绍 UIScrollView 的使用方法,包括创建 UIScrollView、添加图片、调整显示范围、实现缩放和平滑滚动等功能,并通过实例演示如何实现相册效果及循环播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


---- 创建一个UIScrollView
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    scrollView.
backgroundColor = [UIColor redColor];
    [
self.view addSubview:scrollView];
    scrollView.
tag = 2;
    [scrollView
release];

----添加一张图片到scorllview上去
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    imageView.
image = [UIImage imageNamed:@"faye1"];
    [scrollView
addSubview:imageView];
    imageView.
tag = 1;
    [imageView
release];
   
----比较重要的属性
// 1 显示范围  能滑动的范围
   
// 左右改变宽
    scrollView.
contentSize = CGSizeMake(kScreenWidth * 2, kScreenHeight * 1);
   
// 这样用户体验特别垃圾 会出现卡半屏的情况 调用一滚一屏幕的属性  超过一半就换
    scrollView.
pagingEnabled = YES;
    scrollView.
alwaysBounceVertical = NO;
    scrollView.
alwaysBounceHorizontal = YES;
   
   
// 边界回弹
    scrollView.
bounces = YES;
   
   
// 水平滚动条是否显示
    scrollView.
showsHorizontalScrollIndicator = YES;
   
// 垂直滚动条是否显示
    scrollView.
showsVerticalScrollIndicator = YES;
   
// 重要属性  默认是0,0  滑动的左上角的点 距离原点 的位置
  
// scrollView.contentOffset = CGPointMake(kScreenWidth, 0);
   
   
// 控制缩放的属性
    scrollView.
maximumZoomScale = 3.0;
    scrollView.
minimumZoomScale = 0.5;

   
// 最重要的就是一堆代理方法
    scrollView.delegate = self;
    UIButton *returnButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
    returnButton.backgroundColor = [UIColor greenColor];
    [returnButton
addTarget:self action:@selector(actionReturnButton:) forControlEvents:(UIControlEventTouchUpInside)];
    returnButton.
frame = CGRectMake(10, 10, 50, 30);
    [self.view addSubview:returnButton];
#pragma mark -- UIScrollDelegate--
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
   
NSLog(@"你拖动我就触发");
}

- (
void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
   
NSLog(@"将要开始减速");
}

- (
void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
   
NSLog(@"已经结束减速");
}
- (
void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
   
NSLog(@"将要开始拖拽");
}

- (
void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
   
NSLog(@"已经结束拖拽");
}
/**
 * 
缩放
 */

- (
void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
   
   
NSLog(@"将要开始缩放");
}
- (
void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
  
   
NSLog(@"已经结束缩放");
}
- (
void)scrollViewDidZoom:(UIScrollView *)scrollView
{
   
UIImageView *view1 = (UIImageView *)[self.view viewWithTag:1];
    view1.
center = self.view.center;
   
NSLog(@"一缩放 就触发");
}


--------------
 *    缩放中最重要的方法
 
        1.
指定scrollview的子视图进行缩放
        2.
返回的就是scrollview的子视图
        3.
可以写属性  可以用tag值去取  还可以用for in 进行遍历    还可以用下面的方法
 */

- (
UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
   
return scrollView.subviews[0];
}
/**
 * 
点击按钮 返回原图大小
 */

#pragma mark --------缩放

/**
 *  1.
缩放的是scorllView
    2.
缩放的属性是给scorllview 设置的
    3.
是通过缩放scorllview 改变其指定的子视图的大小
    4.
那么 我们要是一个相册 的每张图片都能缩放 如何操作?
    5.
我们需要一个大的bgscorllview 控制左右滑动
    6.
然后有一堆 subScorllview 上面分别加上图片
    7.
将这堆subScorllview 加到大的bgscorllview 上面
    8. subScorllview
控制缩放
 */

- (
void)actionReturnButton:(UIButton *)button
{
   
// 先把scroll VIew取出来
   
UIScrollView *view2 = (UIScrollView *)[self.view viewWithTag:2];
    [view2
setZoomScale:1 animated:YES];
   
//view2.zoomScale = 1;
   
/**
     *  *******-******上面的方法还有动画,下面的不高大-上******************************
     */
//    UIImageView *view1 = (UIImageView *)[self.view viewWithTag:1];
//    view1.frame = self.view.frame;
}
==========================================================================
-------创建一个UIpageControl
   -创建的时候一定要够宽 够现实所有的点
    UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, 100, 375, 100)];
    pageControl.
backgroundColor = [UIColor blueColor];
    [
self.view addSubview:pageControl];
    [pageControl
release];
    -设置总页数
    pageControl.numberOfPages = 10;
    -默认的颜色 (未选中)
    pageControl.pageIndicatorTintColor = [UIColor greenColor];
    -当前页面的颜色
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    -当前选中第几个
    pageControl.currentPage = 10;
    -添加点击方法
    [pageControl addTarget:self action:@selector(actionPageControl:) forControlEvents:(UIControlEventValueChanged)];

- (void)actionPageControl:(UIPageControl *)pageControl
{
   
}
===================================相册==========================
- (void)addSubViews
{
   
// 创建一个  ~ S~ 出来
   
UIScrollView *scorllView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    scorllView.
tag = kBGScrollViewTag;
   
// 滑动区域
    scorllView.
contentSize = CGSizeMake(kScreenWidth * 6, kScreenHeight);
    scorllView.
backgroundColor = [UIColor whiteColor];
    [
self.view addSubview:scorllView];
   
// S 设置代理  触发滑动的代理方法
    scorllView.
delegate = self;

   
// 整屏滚动
    scorllView.
pagingEnabled = YES;
   
// 循环创建~~ S~~
   
   
for (int i = 0; i < 6; i++) {
       
UIScrollView *smallScrollView = [[UIScrollView alloc]initWithFrame:
                                        
CGRectMake(kScreenWidth * i, 0, kScreenWidth, kScreenHeight)];
        smallScrollView.
backgroundColor = [UIColor greenColor];
       
// 设置缩放属性
        smallScrollView.
minimumZoomScale = 0.5;
        smallScrollView.
maximumZoomScale = 2.0;
       
NSString *imageNameString = [NSString stringWithFormat:@"faye%d", i + 1];
       
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
        imageView.
image = [UIImage imageNamed:imageNameString];
        [smallScrollView
addSubview:imageView];
        [imageView
release];
        [scorllView
addSubview:smallScrollView];
        [smallScrollView
release];
        imageView.
tag = i + 1;
        smallScrollView.
tag = kSmallScrollViewTag + i;
        smallScrollView.
delegate = self;
    }
   
   
// 创建一个pageConrol
   
UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, kScreenHeight - 50, kScreenWidth, 50)];
    pageControl.
numberOfPages = 6;
    pageControl.
currentPage = 0;
    pageControl.
currentPageIndicatorTintColor = [UIColor blackColor];
    pageControl.
pageIndicatorTintColor = [UIColor grayColor];
    [
self.view addSubview:pageControl];
    [pageControl
addTarget:self action:@selector(actionPageControl:) forControlEvents:(UIControlEventValueChanged)];
   
// 加上tag
    pageControl.
tag = 888;
}

// 最重要的方法

- (
UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
   
-咱们指缩放的是小的  进来这个方法的只会是小S
    if (scrollView.tag != kBGScrollViewTag) {
       
return scrollView.subviews[0];
    }
   
return nil;
}

- (
void)scrollViewDidZoom:(UIScrollView *)scrollView
{
-按中心点进行缩放
//    UIImageView *imageView = scrollView.subviews[0];
//    imageView.center = self.view.center;
   
for (int i = 0; i < 6; i++) {
       
UIImageView *view1 = (UIImageView *)[self.view viewWithTag:1 + i];
       view1.
center = self.view.center;
    }
 
//  NSLog(@"正在缩放");

}
- (
void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
 
//  NSLog(@"已经结束");
}
-(
void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
  
// NSLog(@"将要开始");
}
#pragma  mark ---滑动的代理方法
-在结束减速的时候触发pagecontrol 原点的位置
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
-改变PageControl 的圆点位置
    UIPageControl *pageControl1 = (UIPageControl *)[self.view viewWithTag:888];
    pageControl1.
currentPage = scrollView.contentOffset.x / 375;
       
for (int i = 0; i < 6; i++) {
           
UIScrollView *lastView = (UIScrollView *)[self.view viewWithTag:2000 + i];
            [lastView
setZoomScale:1.0 animated:YES];
        }
}
- (
void)actionPageControl:(UIPageControl *)pageControl
{
   
UIScrollView *view1 = (UIScrollView *)[self.view viewWithTag:kBGScrollViewTag];
    [view1
setContentOffset:CGPointMake(kScreenWidth * pageControl.currentPage, 0) animated:YES];
}
======================循环播放==============
- (void)addSubViews
{
   
UIScrollView *bgScrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    bgScrollView.
contentSize = CGSizeMake(kScreenWidth * (3 + 2 ), kScreenHeight);
    bgScrollView.
backgroundColor = [UIColor whiteColor];
    bgScrollView.
delegate = self;
-一上来就显示第二张照片
   
    bgScrollView.
contentOffset = CGPointMake(kScreenWidth, 0);
    [
self.view addSubview:bgScrollView];
    bgScrollView.
pagingEnabled = YES;
    [bgScrollView release];
- 循环小的
    for (int i = 0; i < 5; i++) {
       
UIScrollView *smallScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(kScreenWidth * i, 0, kScreenWidth, kScreenHeight)];
-设置缩放属性
        smallScrollView.minimumZoomScale = 0.5;
        smallScrollView.
maximumZoomScale = 2.0;
        [bgScrollView
addSubview:smallScrollView];
        [smallScrollView
release];
       
// 忍得住寂寞  守得住繁华
创建imageView
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
-添加图片
-等于0 就显示第三张    等于4 就显示第一张
       
       
if (i == 0) {
            imageView.
image = [UIImage imageNamed:@"3"];
        }
else if (i == 4) {
            imageView.
image = [UIImage imageNamed:@"1"];
        }
else {
           
NSString *imageName = [NSString stringWithFormat:@"%d", i];
            imageView.
image = [UIImage imageNamed:imageName];
        }
        [smallScrollView
addSubview:imageView];
        [imageView
release];
    }
}
#pragma mark - 滑动代理方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
-结束减速后(停止时 开始骗人)
-获取当前是第几张
    NSInteger index = scrollView.contentOffset.x / kScreenWidth;
   
if (index == 4) {
        scrollView.
contentOffset = CGPointMake(kScreenWidth, 0);
    }
else if (index == 0) {
        scrollView.
contentOffset = CGPointMake(kScreenWidth * 3, 0);
    }
   
   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值