欢迎光临
我们一直在努力

ios synthesize有什么作用,iphone中property作用是什么

本文目录一览

  • 1,iphone中property作用是什么
  • 2,关于IOS中变量声明方式interface和property的区别
  • 3,ios synthesize有什么作用
  • 4,iOS Byte在h中怎么声明成属性
  • 5,IOS 怎么用UIScrollView来滚动和缩放他的内容第一篇

1,iphone中property作用是什么

如果只是类里使用,也就是不需要外部调用get,set方法,就可以不@property
@property与@synthesize配对使用
就是一个成员变量

iphone中property作用是什么

2,关于IOS中变量声明方式interface和property的区别

区别如下: 1.只在@interface中定义变量的话,所定义的变量只能在当前的类中访问,在其他类中是访问不了的;而用@property声明的变量可以在外部访问。2.用了@property去声明的变量,可以使用“self.变量名”的方式去读写变量。而用@interface的方式就不可以。
@interface viewcontroller : uiviewcontroller // 不使用 @synthesize 只在这里写表示这个属性是私有属性 // 不断给它赋值时不会改变引用计数 nsstring *str_; nsstring *str;}// 不使用 @synthesize 只在这里写表示这个属性是公有属性// 不断给它赋值时会根据 retain assign copy 改变引用计数@property(nonatomic,retain)nsstring *str;// 两个一起写名字相同需要使用 @synthesize str = _str; 合成// 私有属性赋值:str_ = nil;// 公有属性赋值:self.str = nil; 或 _str = nil; 如果合成了可以直接 str = nil;(不过 retain assign copy 会无效)// 属性名加前_表示公有属性,在 @property 声明时系统会自己加// 属性名加后_表示私有属性,这只是为了好看区分可以随意// 现在开启 xcode 5.0 以上都开启了 arc 用什么类型的属性就在哪声明就好了 不用在意内存释放@end@implementation viewcontroller@synthesize str = _str;@end

关于IOS中变量声明方式interface和property的区别

3,ios synthesize有什么作用

一、SDK中描述是在声明property的时候,有2个选择1:通过@synthesize 指令告诉编译器在编译期间产生getter/setter方法。2:通过@dynamic指令,自己实现方法。有些存取是在运行时动态创建的,如在CoreData的NSManagedObject类使用的某些。如果你想这些情况下,声明和使用属性,但要避免缺少方法在编译时的警告,你可以使用@dynamic动态指令,而不是@synthesize合成指令。例如@interface Demo : NSManagedObject }@property (retain) NSString* test;@end]@implementation Demo@dynamic test;@end二、@synthesize will generate getter and setter methods for your property. @dynamic just tells the compiler that the getter and setter methods are implemented not by the class itself but somewhere else (like the superclass)Uses for @dynamic are e.g. with subclasses of NSManagedObject (CoreData) or when you want to create an outlet for a property defined by a superclass that was not defined as an outlet:Super class:@property(nonatomic, retain)NSButton*someButton;…@synthesize someButton;Subclass:@property(nonatomic, retain)IBOutletNSButton*someButton;…@dynamic someButton;

ios synthesize有什么作用

4,iOS Byte在h中怎么声明成属性

IOS5之前在iOS第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是OC语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如:@interface MyViewController :UIViewController UIButton *myButton;}@property (nonatomic, retain) UIButton *myButton;@end123456123456IOS5之后现在,苹果将默认编译器从GCC转换为LLVM(low level virtual machine),从此不再需要为属性声明实例变量了。如果LLVM发现一个没有匹配实例变量的属性,它将自动创建一个以下划线开头的实例变量。因此,在这个版本中,我们不再为输出口声明实例变量。 例如:MyViewController.h文件@interface MyViewController :UIViewController@property (nonatomic, retain) UIButton *myButton;@end123123在MyViewController.m文件中,编译器也会自动的生成一个实例变量_myButton。那么在.m文件中可以直接的使用_myButton实例变量,也可以通过属性self.myButton.都是一样的。 注意这里的self.myButton其实是调用的myButton属性的getter/setter方法。这与C++中点的使用是有区别的,C++中的点可以直接访问成员变量(也就是实例变量)。 例如在oc中有如下代码 .h文件@interface MyViewController :UIViewController NSString *name;}@end1234512345.m文件中,self.name 这样的表达式是错误的。xcode会提示你使用->,改成self->name就可以了。因为oc中点表达式是表示调用方法,而上面的代码中没有name这个方法。 oc语法关于点表达式的说明:”点表达式(.)看起来与C语言中的结构体访问以及Java语言汇总的对象访问有点类似,其实这是oc的设计人员有意为之。如果点表达式出现在等号 = 左边,该属性名称的setter方法将被调用。如果点表达式出现在右边,该属性名称的getter方法将被调用。” 所以在oc中点表达式其实就是调用对象的setter和getter方法的一种快捷方式, 例如:dealie.blah = greeble 完全等价于 [dealie.blah setBlah:greeble];以前的用法,声明属性跟与之对应的实例变量:@interface MyViewController :UIViewControlle UIButton *myButton;}@property (nonatomic, retain) UIButton *myButton;@end123456123456这种方法基本上使用最多,现在大部分也是在使用,因为很多开源的代码都是这种方式。但是ios5更新之后,苹果是建议以以下的方式来使用:@interface MyViewController :UIViewController@property (nonatomic, retain) UIButton *myButton;@end123123因为编译器会自动为你生成以下划线开头的实例变量_myButton,不需要自己手动再去写实例变量。而且也不需要在.m文件中写@synthesize myButton;也会自动为你生成setter,getter方法。@synthesize的作用就是让编译器为你自动生成setter与getter方法。 @synthesize 还有一个作用,可以指定与属性对应的实例变量,例如@synthesize myButton = xxx;那么self.myButton其实是操作的实例变量xxx,而不是_myButton了。 在实际的项目中,我们一般这么写.m文件 @synthesize myButton; 这样写了之后,那么编译器会自动生成myButton的实例变量,以及相应的getter和setter方法。注意:_myButton这个实例变量是不存在的,因为自动生成的实例变量为myButton而不是_myButton,所以现在@synthesize的作用就相当于指定实例变量;类别中的属性property类与类别中添加的属性要区分开来,因为类别中只能添加方法,不能添加实例变量。经常会在ios的代码中看到在类别中添加属性,这种情况下,是不会自动生成实例变量的。比如在:UINavigationController.h文件中会对UIViewController类进行扩展@interface UIViewController (UINavigationControllerItem)@property(nonatomic,readonly,retain) UINavigationItem *navigationItem;@property(nonatomic) BOOL hidesBottomBarWhenPushed;@property(nonatomic,readonly,retain) UINavigationController *navigationController;@end1234512345这里添加的属性,不会自动生成实例变量,这里添加的属性其实是添加的getter与setter方法。 注意一点,匿名类别(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法)。 成员变量用于类内部,无需与外界接触的变量。 根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。 一些建议: 1. 如果只是单纯的private变量,最好声明在implementation里. 2. 如果是类的public属性,就用property写在.h文件里 3. 如果自己内部需要setter和getter来实现一些东西,就在.m文件的类目里用property来声明 .h中的interface的大括号.h中的property变量,.m中需要使用self.propertyVariable的方式使用propertyVariable变量实例.h中声明的属性和成员变量均可以在子类中访问到.而.m则不可.而属性其实也就是成员变量的一种简写,其内部自动包含了getter和setter方法.如图:ViewController是SubController的父类.在ViewController.h中声明成员变量imageView1和属性imageView2(@property) 在ViewController.m中同样声明了成员变量imageView3和属性imageView4. 在ViewController.m中1,通过self.xxx的方法可以出现imageView2和imageView4(属性) 2.通过 _XXX的形式只能出现imageView2,imageView4(属性) 3.通过XXX的形式只能出现imageView1.imageView3(成员变量) 在子类SubController.m中1.通过self.XXX的形式只能出现imageView2(属性) 2.通过 _XXX的形式什么都不会出现. 3.通过XXX的形式可以出现imageView1(成员变量) 开发中(习惯),一般在成员变量前面加个_. 这样一来就明了了. 1. 在本类中访问,通过self.XXX可以访问到imageView2和imageView4. 2. 通过_XXX都可以访问,XXX则都不能. 3. 子类中,通过self.XXX可以访问imageView2,通过_XXX可以访问到imageView1,XXX则都不能.总之,差不多就是在.h中声明的属性或者成员变量在其子类中均可以访问到,只不过形式不一样.在.m中声明的属性或者成员变量只能在本类中访问到.而属性其实就是成员变量的简写,内部自动包含了getter和setter方法.
要把类中所有变量都声明一遍,一般用private封装在类中,然后再用构造__construct()构造一遍,再写一些方法调用就可以了。

5,IOS 怎么用UIScrollView来滚动和缩放他的内容第一篇

UIScrollView是在ios最有用的控件之一。他是一个来展现超过一个屏幕的内容的很好的方式。下面有很多的技巧来使用他。  这篇文章就是关于UIScrollView的,深入浅出,看看我们接下来学习的内容:  1:怎么用UIScrollView来展一个比较大的图片  2:当UIScrollView缩放的时候怎么一直保持在中间  3:在UIScrollView里面怎么嵌入一个复杂的视图层次  4:UIScrollView的特性怎么和UIPageControl一起来浏览多个页面的内容  5:创建一个UIScrollView滚动视图在上面能看到下一页和上一页的一部分并且还能看到当前页面。这就像appstore的一个浏览app的一个效果。  这篇文章是ios5.0以上 xcode4.5的环境  我们开始创建一个项目如下图:  Image  我们填上项目的名字还有你创建appid时候写的公司标识,还有类名字的前缀,设置我们的设备是iPhone我们暂时只支持iPhone的模式,选择单视图模版。选择下一步并且选择保存位置。  由于我们介绍UIScrollView的4个效果,因此我们创建一个tableView,每个cell会出现一个新的视图控制器并且展现一个效果。  Image(1)  上面这个图显示现在你的storyboard是什么样的当你完成的时候。  我们编译UITableView的导航,接下来我们要做的是:  1:打开MainStroyboard.storyboard并且点击系统模版给我们创建的第一个初始化场景。  2:然后我们添加一个UITableViewController从对象库然后放到storyboard。  3:现在选择tableView你刚才添加的然后选择Editor,然后Embed in,NavigationController。  4:选择tableViewController的tableView,并且设置他的cell类型是静态类型的在属性检查器。  5:最后,设置tableView的section是一个,有4个cell,设置cell是basic类型。然后把他们的lables改为Image scroll,custom View scroll,paged paged with peeking  Image(2)  保存这个storyboard ,并且编译运行。你应该看到你的tableView。如下图:  Image(3)  滚动缩放一个大图片:  我们接下来要做的是学习怎么用UIScrollView来缩放和滚动一个大的图片。  第一步你需要设置这个Viewcontroller,选择ViewController.h 并且添加一个UIScrollView的outlet。让你的Controller符合UIScrollView的UIScrollViewDelegate协议如下  复制代码  #import     @interface ViewController : UIViewController     @property (nonatomic, strong) IBOutlet UIScrollView *scrollView;    @end  复制代码  然后在在ViewController.m设置实现属性  @synthesize scrollView = _scrollView;  回到storyboard,从对象库拖拽一个Viewcontroller并且设置他的类是Viewcontroller。  Image(4)  点击tableview的Cell crl+点击鼠标左键向一个新的Viewcontroller拖拽,并且弹出一个storyboard segues并且选择push效果。  从对象库拖拽一个UIScrollView到Viewcontroller上并且填充。  Image(5)  然后然后把UIScrollView的输出口连上还有设置Viewcontroller作为UIScrollView的代理。如下图:  Image(6)  现在在Viewcontroller.m中的延展中添加属性和方法。这些属性方法是私有的。  然后添加  @synthesize imageView = _imageView;  现在我们开始设置我们的UIScrollView了在viewDidLoad和viewVillAppear  用下面代码:  复制代码  - (void)viewDidLoad {  [super viewDidLoad];    // 1  UIImage *image = [UIImage imageNamed:@”photo1.png”];  self.imageView = [[UIImageView alloc] initWithImage:image];  self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image.size};  [self.scrollView addSubview:self.imageView];    // 2  self.scrollView.contentSize = image.size;    // 3  UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewDoubleTapped:)];  doubleTapRecognizer.numberOfTapsRequired = 2;  doubleTapRecognizer.numberOfTouchesRequired = 1;  [self.scrollView addGestureRecognizer:doubleTapRecognizer];    UITapGestureRecognizer *twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped:)];  twoFingerTapRecognizer.numberOfTapsRequired = 1;  twoFingerTapRecognizer.numberOfTouchesRequired = 2;  [self.scrollView addGestureRecognizer:twoFingerTapRecognizer];  }    - (void)viewWillAppear:(bool)animated {  [super viewWillAppear:animated];    // 4  CGRect scrollViewFrame = self.scrollView.frame;  CGFloat scaleWidth = scrollViewFrame.size.width / self.scrollView.contentSize.width;  CGFloat scaleHeight = scrollViewFrame.size.height / self.scrollView.contentSize.height;  CGFloat minScale = min(scaleWidth, scaleHeight);  self.scrollView.minimumzoomScale = minScale;    // 5  self.scrollView.maximumzoomScale = 1.0f;  self.scrollView.zoomScale = minScale;    // 6  [self centerScrollViewContents];  }  复制代码  上面的代码看起来有点复杂。因此我们停下来一步步的分析下。  1:第一步,你需要创建一个UIImageView,设置他的Image属性,然后设置UIImageView的坐标,并且添加到UIScrollView上  2:然后我们设置UIScrollView的contentSize,这样做的目的是让UIScrollView知道他自己能向横方向和竖方向滚动多远或者说多少像素。  3:然后向UIScrollView上面添加了两个手势:一个是双击手势来缩小,另一个两个手指单击来放大。  4:接下来我们需要计算UIScrollView的最小缩放比例。缩放比例是1意味着UIScrollView的内容是正常大小展示。小于1,展示内容放大,当  大于1说明内容缩小。为了得到最小缩放比例,你需要计算你缩放多少才能让图片舒适的展示到UIScrollView里根据他的宽度。然后你根据他的高度做相同的计算。最后比较这两个缩放比例的最小的一个设置为UIScrollView最小缩放比例。给你一个缩放比例然后你可以看到整张图片当放大的时候。  5:你设置最大缩放比例为1,因为缩放的比图片分辨率大你看图片会模糊。你设置初始缩放为最小缩放比例。因此这个图片可以开始充分放大。  6:让你的图片永远在UIScrollView中间当缩放时候。  复制代码  - (void)centerScrollViewContents {  CGSize boundsSize = self.scrollView.bounds.size;  CGRect contentsFrame = self.imageView.frame;    if (contentsFrame.size.width < boundsSize.width) {  contentsFrame.origin.x = (boundsSize.width – contentsFrame.size.width) / 2.0f;  } else {  contentsFrame.origin.x = 0.0f;  }    if (contentsFrame.size.height < boundsSize.height) {  contentsFrame.origin.y = (boundsSize.height – contentsFrame.size.height) / 2.0f;  } else {  contentsFrame.origin.y = 0.0f;  }    self.imageView.frame = contentsFrame;  }如果UIScrollView的bounds大小大于UIImageView图片frame的大小,那么图片的坐标就是条件为真时计算的结果,相反就是原始坐标。- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer {  // 1  CGPoint pointInView = [recognizer locationInView:self.imageView];    // 2  CGFloat newzoomScale = self.scrollView.zoomScale * 1.5f;  newzoomScale = min(newzoomScale, self.scrollView.maximumzoomScale);    // 3  CGSize scrollViewSize = self.scrollView.bounds.size;    CGFloat w = scrollViewSize.width / newzoomScale;  CGFloat h = scrollViewSize.height / newzoomScale;  CGFloat x = pointInView.x – (w / 2.0f);  CGFloat y = pointInView.y – (h / 2.0f);    CGRect rectTozoomTo = CGRectMake(x, y, w, h);    // 4  [self.scrollView zoomToRect:rectTozoomTo animated:YES];  }  复制代码  1:获得你点击图片的坐标位置.  2:接下来计算缩放比例缩放150%,但是必须限制最大缩放比例  3:然后用第一步计算的位置计算你想要缩放的位置大小。  4:最后,你需要告诉UIScrollView缩放的frame并且加上动画。  - (void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer {  // zoom out slightly, capping at the minimum zoom scale specified by the scroll view  CGFloat newzoomScale = self.scrollView.zoomScale / 1.5f;  newzoomScale = max(newZoomScale, self.scrollView.minimumZoomScale);  [self.scrollView setZoomScale:newZoomScale animated:YES];  }  这类似放大的方式。  - (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {  // Return the view that you want to zoom  return self.imageView;  }  这是UIScrollView缩放机制的灵魂地方。当UIScrollView完成缩放时候你告诉他是哪个视图在UIScrollView里面实现了缩放。  - (void)scrollViewDidZoom:(UIScrollView *)scrollView {  // The scroll view has zoomed, so you need to re-center the contents  [self centerScrollViewContents];  }  这个方法是当UIScrollView完成缩放时候,你需要通知视图在UIScrollView中间,否则UIScrollView缩放不自然。  Image(7)  编译运行项目出现上图效果,你可以试着放大缩小滚动。
UIScrollView是在ios最有用的控件之一。他是一个来展现超过一个屏幕的内容的很好的方式。下面有很多的技巧来使用他。  这篇文章就是关于UIScrollView的,深入浅出,看看我们接下来学习的内容:  1:怎么用UIScrollView来展一个比较大的图片  2:当UIScrollView缩放的时候怎么一直保持在中间  3:在UIScrollView里面怎么嵌入一个复杂的视图层次  4:UIScrollView的特性怎么和UIPageControl一起来浏览多个页面的内容  5:创建一个UIScrollView滚动视图在上面能看到下一页和上一页的一部分并且还能看到当前页面。这就像appstore的一个浏览app的一个效果。  这篇文章是ios5.0以上 xcode4.5的环境  我们开始创建一个项目如下图:  Image  我们填上项目的名字还有你创建appid时候写的公司标识,还有类名字的前缀,设置我们的设备是iPhone我们暂时只支持iPhone的模式,选择单视图模版。选择下一步并且选择保存位置。  由于我们介绍UIScrollView的4个效果,因此我们创建一个tableView,每个cell会出现一个新的视图控制器并且展现一个效果。  Image(1)  上面这个图显示现在你的storyboard是什么样的当你完成的时候。  我们编译UITableView的导航,接下来我们要做的是:  1:打开MainStroyboard.storyboard并且点击系统模版给我们创建的第一个初始化场景。  2:然后我们添加一个UITableViewController从对象库然后放到storyboard。  3:现在选择tableView你刚才添加的然后选择Editor,然后Embed in,NavigationController。  4:选择tableViewController的tableView,并且设置他的cell类型是静态类型的在属性检查器。  5:最后,设置tableView的section是一个,有4个cell,设置cell是basic类型。然后把他们的lables改为Image scroll,custom View scroll,paged paged with peeking  Image(2)  保存这个storyboard ,并且编译运行。你应该看到你的tableView。如下图:  Image(3)  滚动缩放一个大图片:  我们接下来要做的是学习怎么用UIScrollView来缩放和滚动一个大的图片。  第一步你需要设置这个Viewcontroller,选择ViewController.h 并且添加一个UIScrollView的outlet。让你的Controller符合UIScrollView的UIScrollViewDelegate协议如下  复制代码  #import     @interface ViewController : UIViewController     @property (nonatomic, strong) IBOutlet UIScrollView *scrollView;    @end  复制代码  然后在在ViewController.m设置实现属性  @synthesize scrollView = _scrollView;  回到storyboard,从对象库拖拽一个Viewcontroller并且设置他的类是Viewcontroller。  Image(4)  点击tableview的Cell crl+点击鼠标左键向一个新的Viewcontroller拖拽,并且弹出一个storyboard segues并且选择push效果。  从对象库拖拽一个UIScrollView到Viewcontroller上并且填充。  Image(5)  然后然后把UIScrollView的输出口连上还有设置Viewcontroller作为UIScrollView的代理。如下图:  Image(6)  现在在Viewcontroller.m中的延展中添加属性和方法。这些属性方法是私有的。  然后添加  @synthesize imageView = _imageView;  现在我们开始设置我们的UIScrollView了在viewDidLoad和viewVillAppear  用下面代码:  复制代码  - (void)viewDidLoad {  [super viewDidLoad];    // 1  UIImage *image = [UIImage imageNamed:@”photo1.png”];  self.imageView = [[UIImageView alloc] initWithImage:image];  self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image.size};  [self.scrollView addSubview:self.imageView];    // 2  self.scrollView.contentSize = image.size;    // 3  UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewDoubleTapped:)];  doubleTapRecognizer.numberOfTapsRequired = 2;  doubleTapRecognizer.numberOfTouchesRequired = 1;  [self.scrollView addGestureRecognizer:doubleTapRecognizer];    UITapGestureRecognizer *twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped:)];  twoFingerTapRecognizer.numberOfTapsRequired = 1;  twoFingerTapRecognizer.numberOfTouchesRequired = 2;  [self.scrollView addGestureRecognizer:twoFingerTapRecognizer];  }    - (void)viewWillAppear:(bool)animated {  [super viewWillAppear:animated];    // 4  CGRect scrollViewFrame = self.scrollView.frame;  CGFloat scaleWidth = scrollViewFrame.size.width / self.scrollView.contentSize.width;  CGFloat scaleHeight = scrollViewFrame.size.height / self.scrollView.contentSize.height;  CGFloat minScale = min(scaleWidth, scaleHeight);  self.scrollView.minimumzoomScale = minScale;    // 5  self.scrollView.maximumzoomScale = 1.0f;  self.scrollView.zoomScale = minScale;    // 6  [self centerScrollViewContents];  }  复制代码  上面的代码看起来有点复杂。因此我们停下来一步步的分析下。  1:第一步,你需要创建一个UIImageView,设置他的Image属性,然后设置UIImageView的坐标,并且添加到UIScrollView上  2:然后我们设置UIScrollView的contentSize,这样做的目的是让UIScrollView知道他自己能向横方向和竖方向滚动多远或者说多少像素。  3:然后向UIScrollView上面添加了两个手势:一个是双击手势来缩小,另一个两个手指单击来放大。  4:接下来我们需要计算UIScrollView的最小缩放比例。缩放比例是1意味着UIScrollView的内容是正常大小展示。小于1,展示内容放大,当  大于1说明内容缩小。为了得到最小缩放比例,你需要计算你缩放多少才能让图片舒适的展示到UIScrollView里根据他的宽度。然后你根据他的高度做相同的计算。最后比较这两个缩放比例的最小的一个设置为UIScrollView最小缩放比例。给你一个缩放比例然后你可以看到整张图片当放大的时候。  5:你设置最大缩放比例为1,因为缩放的比图片分辨率大你看图片会模糊。你设置初始缩放为最小缩放比例。因此这个图片可以开始充分放大。  6:让你的图片永远在UIScrollView中间当缩放时候。  复制代码  - (void)centerScrollViewContents {  CGSize boundsSize = self.scrollView.bounds.size;  CGRect contentsFrame = self.imageView.frame;    if (contentsFrame.size.width < boundsSize.width) {  contentsFrame.origin.x = (boundsSize.width – contentsFrame.size.width) / 2.0f;  } else {  contentsFrame.origin.x = 0.0f;  }    if (contentsFrame.size.height < boundsSize.height) {  contentsFrame.origin.y = (boundsSize.height – contentsFrame.size.height) / 2.0f;  } else {  contentsFrame.origin.y = 0.0f;  }    self.imageView.frame = contentsFrame;  }如果UIScrollView的bounds大小大于UIImageView图片frame的大小,那么图片的坐标就是条件为真时计算的结果,相反就是原始坐标。- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer {  // 1  CGPoint pointInView = [recognizer locationInView:self.imageView];    // 2  CGFloat newzoomScale = self.scrollView.zoomScale * 1.5f;  newzoomScale = min(newzoomScale, self.scrollView.maximumzoomScale);    // 3  CGSize scrollViewSize = self.scrollView.bounds.size;    CGFloat w = scrollViewSize.width / newzoomScale;  CGFloat h = scrollViewSize.height / newzoomScale;  CGFloat x = pointInView.x – (w / 2.0f);  CGFloat y = pointInView.y – (h / 2.0f);    CGRect rectTozoomTo = CGRectMake(x, y, w, h);    // 4  [self.scrollView zoomToRect:rectTozoomTo animated:YES];  }  复制代码  1:获得你点击图片的坐标位置.  2:接下来计算缩放比例缩放150%,但是必须限制最大缩放比例  3:然后用第一步计算的位置计算你想要缩放的位置大小。  4:最后,你需要告诉UIScrollView缩放的frame并且加上动画。  - (void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer {  // zoom out slightly, capping at the minimum zoom scale specified by the scroll view  CGFloat newzoomScale = self.scrollView.zoomScale / 1.5f;  newzoomScale = max(newZoomScale, self.scrollView.minimumZoomScale);  [self.scrollView setZoomScale:newZoomScale animated:YES];  }  这类似放大的方式。  - (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {  // Return the view that you want to zoom  return self.imageView;  }  这是UIScrollView缩放机制的灵魂地方。当UIScrollView完成缩放时候你告诉他是哪个视图在UIScrollView里面实现了缩放。  - (void)scrollViewDidZoom:(UIScrollView *)scrollView {  // The scroll view has zoomed, so you need to re-center the contents  [self centerScrollViewContents];  }  这个方法是当UIScrollView完成缩放时候,你需要通知视图在UIScrollView中间,否则UIScrollView缩放不自然。  Image(7)  编译运行项目出现上图效果,你可以试着放大缩小滚动。
你说呢…
赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。