- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ScrollView 对 subview 页面进行分页,这些 subview 是可以在 iOS 上缩放的图像。分页有效,但是一旦图像被缩放,应用程序就会崩溃并显示 EXEC_BAD_ACCESS(code=1,address=...)
我知道滑动缩放图像来平移图像并滑动来分页有点奇怪,但在真实的应用程序中,分页将通过页面控件完成。我也认为它可以像预览应用程序一样工作。如果图像被缩放,平移将向下移动到图像的底部,然后在到达底部后,它将转到下一张图像。
这可能吗?
这是一个例子:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
ScrollerViewController *viewController = [[ScrollerViewController alloc] init];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
}
ScrollerViewController.m - 外部分页 View Controller
- (void)viewDidLoad {
[super viewDidLoad];
// outer scroll view for paging with two pages
CGRect frame = CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height);
UIScrollView *pagingScroller = [[UIScrollView alloc] initWithFrame:frame];
pagingScroller.pagingEnabled = YES;
pagingScroller.scrollsToTop = NO;
pagingScroller.userInteractionEnabled = YES;
pagingScroller.contentSize = CGSizeMake(self.view.bounds.size.width*2,self.view.bounds.size.height);
// first page
ImageViewController *page1 = [[ImageViewController alloc] init];
page1.filename = @"cat.jpg";
page1.view.frame = CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height);
[pagingScroller addSubview:page1.view];
// second page
ImageViewController *page2 = [[ImageViewController alloc] init];
page2.filename = @"dog.jpg";
page2.view.frame = CGRectMake(self.view.bounds.size.width,0,self.view.bounds.size.width,self.view.bounds.size.height);
[pagingScroller addSubview:page2.view];
self.view = pagingScroller;
}
ImageViewController.m - 双指缩放图像
- (void)viewDidLoad {
[super viewDidLoad];
// scroll view for pinch zooming
CGRect frame = CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height);
UIScrollView *zoomScroller = [[UIScrollView alloc] initWithFrame:frame];
zoomScroller.minimumZoomScale = 1.0;
zoomScroller.maximumZoomScale = 5.0;
zoomScroller.userInteractionEnabled = YES;
zoomScroller.delegate = self;
imageView = [[UIImageView alloc] initWithFrame:frame];
imageView.userInteractionEnabled = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.image = [UIImage imageNamed:filename];
[zoomScroller addSubview:imageView];
self.view = zoomScroller;
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return imageView;
}
完整项目位于 https://github.com/tomkincaid/ZoomScrollTest
我可以通过更改来测试双指缩放是否有效
ScrollerViewController *viewController = [[ScrollerViewController alloc] init];
到
ImageViewController *viewController = [[ImageViewController alloc] init];
viewController.filename = @"cat.jpg";
最佳答案
您发布问题已经有一段时间了。我敢打赌你已经自己修复了它,但我想确保其他人可以使用你的代码。
但是我下载了你的 GitHub 小项目,发现你崩溃了,因为你没有在 [ScrollerViewController viewDidLoad] 中保留 ImageViewController 的 page1 和 page2。他们自己的观点不保留他们的 Controller ,因此在您的情况下, Controller 在 viewDidLoad 之后被释放。然后,当您在图像 ScrollView 上捏合时,它会调用它的委托(delegate),但它已经被释放。
为了解决这个问题,我向 ScrollerViewController 类添加了两个 ImageViewController 属性,并将 Controller 对象存储在那里。
@interface ScrollerViewController ()
@property (strong) ImageViewController *page1;
@property (strong) ImageViewController *page2;
@end
在[ScrollerViewController viewDidLoad]中我在最后添加了:
self.page1 = page1;
self.page2 = page2;
我希望有人会发现此信息有用。也许您想更新您的 GitHub 项目,以便它能够编译和运行。
关于ios - 如何让图像在 iOS 的分页 ScrollView 中缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970778/
我是一名优秀的程序员,十分优秀!