【问题标题】:how to resize UIScrollview dynamically如何动态调整 UIScrollview 的大小
【发布时间】:2023-03-20 02:21:02
【问题描述】:

我正在使用 UIScrollview 缩放图像..我的 UIScrollview 大小是固定的,所以每当我缩放图像时它就会被剪切..我想这样做,因为我缩放图像时 UIScrollview 也会增加高度和宽度根据图像缩放.. 任何建议将不胜感激......

【问题讨论】:

标签: iphone objective-c uiscrollview zooming


【解决方案1】:

这应该可行:-)

  1. 制作 UIImage
  2. 制作一个 UIImageView 来保存图像
  3. 将 UIImageView 放入 UIScrollView
  4. 将 UIScrollView 的 contentSize 设置为 UIImage 的大小
  5. 记得返回viewForZoomingInScrollView中的UIimageView

把它放到你的 .h 文件中:

UIImageView *imageView;

@property (nonatomic, retain) UIImageView *imageView;

并且记得合成发布imageView

把它放在你想要滚动视图的地方:

UIImage *image = [UIImage imageNamed:@"myImage.jpg"];
imageView = [[UIImageView alloc] initWithImage:image];
[imageView setFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[scrollView setMinimumZoomScale:0.5];
[scrollView setMaximumZoomScale:3.0];
[scrollView setContentSize:CGSizeMake(image.size.width, image.size.height)];
[scrollView setDelegate:self];
[scrollView addSubview:imageView];
[[self view] addSubview:scrollView];
[scrollView release];

添加 UIScrollView 委托方法

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return imageView;
}

更新:

我在添加上述解决方案时误解了这个问题。应该这样做:-)

kScrollViewAddSize 是一个常量,它定义了要添加到 UIScrollView 大小的数量。

在您的 .h 文件中,您应该添加以下内容:

UIImageView *imageView;
UIScrollView *scrollView;

记得合成并释放它们。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *image = [UIImage imageNamed:@"apple.jpg"];
    imageView = [[UIImageView alloc] initWithImage:image];
    [imageView setFrame:CGRectMake(kScrollViewAddSize / 2, kScrollViewAddSize / 2, image.size.width, image.size.height)];
    int width = imageView.frame.size.width + kScrollViewAddSize;
    int height = imageView.frame.size.height + kScrollViewAddSize;
    scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake((self.view.frame.size.width - width) / 2, (self.view.frame.size.height - height) / 2, width, height)];
    [scrollView setMinimumZoomScale:0.5];
    [scrollView setMaximumZoomScale:3.0];
    [scrollView setBackgroundColor:[UIColor redColor]];
    [scrollView setContentSize:CGSizeMake(image.size.width, image.size.height)];
    [scrollView setDelegate:self];
    [scrollView addSubview:imageView];
    [[self view] addSubview:scrollView];
}

- (void)scrollViewDidZoom:(UIScrollView *)_scrollView {
    int width = imageView.frame.size.width + kScrollViewAddSize;
    int height = imageView.frame.size.height + kScrollViewAddSize;
    [scrollView setFrame:CGRectMake((self.view.frame.size.width - width) / 2, (self.view.frame.size.height - height) / 2, imageView.frame.size.width + kScrollViewAddSize, imageView.frame.size.height + kScrollViewAddSize)];
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)_scrollView {
    return imageView;
}

viewDidLoad 中添加要创建 UIScrollView 的部分并添加两个委托方法。

【讨论】:

  • 您好 SimonBS 感谢您的回复,但您所说的是避免图像剪切...我知道在使 UIScrollview 框架与 self.view 相同后,图像剪切问题将得到解决。 ...但我想根据图像大小制作 UIScrollview ..
  • 例如假设我的图像大小是 70 * 70,那么 UIScrollview 大小应该像 80 * 80 一样大一点,但是当我尝试缩放时,图像会更大..假设当时缩放图像大小是 120 * 120,那么 UIScrollview 大小应该是130 * 130...
  • 感谢 SimonBS 的帖子,它对我有很大帮助..我成功地自动调整了滚动视图...现在我面临另一个问题,在缩放效果后它总是会转到左上角,所以对于另一个缩放效果我需要将它从一个角落拖到中心..我希望滚动视图应该停留在我放大的最后一个地方..放大和缩小效果完全可以,但之后它会转到左上角主要问题。
  • 如果我想向 UIScrollView 添加许多图像并希望在更改方向时使图像正确自动调整大小?
猜你喜欢
  • 1970-01-01
  • 2012-08-07
  • 2011-03-03
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多