UIScrollView的简单例子

本文介绍了一个自定义iOS UIScrollView子类MyScrollView,用于实现图片的缩放和平移功能,并在一个示例应用MainViewController中展示了如何使用多个MyScrollView实例创建水平滑动页面。

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

MyScrollView.h

 

Ios代码   收藏代码
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface MyScrollView : UIScrollView <UIScrollViewDelegate> {  
  4.     UIImage *image;  
  5.     UIImageView *imageView;  
  6. }  
  7.   
  8. @property (nonatomic, retain) UIImage *image;  
  9.   
  10. @end  

 

MyScrollView.m

 

Ios代码   收藏代码
  1. #import "MyScrollView.h"  
  2.   
  3. @implementation MyScrollView  
  4.   
  5. @synthesize image;  
  6.   
  7. - (id)initWithFrame:(CGRect)frame {  
  8.     if ((self = [super initWithFrame:frame])) {  
  9.         self.delegate = self;  
  10.         self.minimumZoomScale = 0.5;  
  11.         self.maximumZoomScale = 2.5;  
  12.         self.showsVerticalScrollIndicator = NO;  
  13.         self.showsHorizontalScrollIndicator = NO;  
  14.           
  15.         imageView = [[UIImageView alloc] initWithFrame:CGRectMake(00, self.frame.size.width, self.frame.size.height)];  
  16.         imageView.contentMode = UIViewContentModeCenter;  
  17.         [self addSubview:imageView];  
  18.     }  
  19.     return self;  
  20. }  
  21.   
  22. - (void)setImage:(UIImage *)img {  
  23.     imageView.image = img;  
  24. }  
  25.   
  26. - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {   
  27.     return imageView;  
  28. }  
  29.   
  30. - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {  
  31.     CGFloat zs = scrollView.zoomScale;  
  32.     zs = MAX(zs, 1.0);  
  33.     zs = MIN(zs, 2.0);    
  34.       
  35.     [UIView beginAnimations:nil context:NULL];  
  36.     [UIView setAnimationDuration:0.3];        
  37.     scrollView.zoomScale = zs;    
  38.     [UIView commitAnimations];  
  39. }  
  40.   
  41. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
  42.     UITouch *touch = [touches anyObject];  
  43.       
  44.     if ([touch tapCount] == 2) {  
  45.         CGFloat zs = self.zoomScale;  
  46.         zs = (zs == 1.0) ? 2.0 : 1.0;  
  47.           
  48.         [UIView beginAnimations:nil context:NULL];  
  49.         [UIView setAnimationDuration:0.3];            
  50.         self.zoomScale = zs;      
  51.         [UIView commitAnimations];  
  52.     }  
  53. }  
  54.   
  55. - (void)dealloc {  
  56.     [image release];  
  57.     [imageView release];  
  58.       
  59.     [super dealloc];  
  60. }  
  61.   
  62. @end  

 

  1. #import "MyScrollView.h"  
  2.   
  3. @interface MainViewController : UIViewController <UIScrollViewDelegate> {  
  4.     IBOutlet UIScrollView *scrView;  
  5.       
  6.     NSInteger lastPage;  
  7. }  
  8.   
  9. @end  

 

MainViewController.m

 

Ios代码   收藏代码
  1. #import "MainViewController.h"  
  2.   
  3. @implementation MainViewController  
  4.   
  5. - (void)viewDidLoad {  
  6.     [super viewDidLoad];  
  7.       
  8.     self.view.backgroundColor = [UIColor blackColor];  
  9.       
  10.     scrView.contentSize = CGSizeMake(1700480);  
  11.     scrView.showsHorizontalScrollIndicator = NO;  
  12.       
  13.     for (int i = 0; i < 5; i++) {  
  14.         MyScrollView *ascrView = [[MyScrollView alloc] initWithFrame:CGRectMake(340 * i, 0320480)];  
  15.         NSString *imgPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d", i + 1] ofType:@"jpg"];  
  16.         ascrView.image = [UIImage imageWithContentsOfFile:imgPath];  
  17.         ascrView.tag = 100 + i;  
  18.           
  19.         [scrView addSubview:ascrView];  
  20.         [ascrView release];  
  21.     }  
  22.       
  23.     lastPage = 0;  
  24. }  
  25.   
  26. //划动的动画结束后调用  
  27. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {  
  28.     CGFloat pageWidth = scrollView.frame.size.width;  
  29.     NSInteger page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;  
  30.       
  31.     if (lastPage != page) {  
  32.         MyScrollView *aView = (MyScrollView *)[scrView viewWithTag:100 + lastPage];  
  33.         aView.zoomScale = 1.0;  
  34.           
  35.         lastPage = page;  
  36.     }  
  37. }  
  38.   
  39. - (void)didReceiveMemoryWarning {  
  40.     [super didReceiveMemoryWarning];  
  41. }  
  42.   
  43. - (void)viewDidUnload {  
  44.     scrView = nil;  
  45. }  
  46.   
  47. - (void)dealloc {  
  48.     [scrView release];  
  49.     [super dealloc];  
  50. }  
  51.   
  52. @end  
1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值