gpt4 book ai didi

ios - 如何让图像在 iOS 的分页 ScrollView 中缩放?

转载 作者:行者123 更新时间:2023-11-29 12:53:01 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com