如何设置合适的 UIImageView 大小

Posted

技术标签:

【中文标题】如何设置合适的 UIImageView 大小【英文标题】:How to set proper size of UIImageView 【发布时间】:2013-09-20 15:49:31 【问题描述】:

我从 developer.apple.com 下载了示例代码“使用 UIImagePickerController 选择图片并拍照”,基本上我保持原样。我已经添加了功能,如果我拍摄了一些照片,并且我再次在 imagePickerController 视图中拍摄另一张照片,它会与之前拍摄的照片重叠。还有滑块,我可以更改叠加层的不透明度,效果很好。

但是,之前拍摄的照片没有缩放以适应视图,而是只能看到原始分辨率的一部分。那么如何将 overlayImage 设置为适当的大小?我试过使用故事板/笔尖文件/以编程方式添加它,但没有成功。

@property (nonatomic, weak) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIImageView *overlayImage;
@property (nonatomic) IBOutlet UIView *overlayView;

方法如下:

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType

if (self.imageView.isAnimating)

    [self.imageView stopAnimating];


if (self.capturedImages.count > 0)

    //[self.capturedImages removeAllObjects];


UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
imagePickerController.showsCameraControls = NO;

if (sourceType == UIImagePickerControllerSourceTypeCamera)

    [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
    self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
    imagePickerController.cameraOverlayView = self.overlayView;
    self.overlayView = nil;
    self.overlayImage = self.imageView;
    self.overlayImage.alpha = 0.5;

    UISlider *slider=[[UISlider alloc]initWithFrame:CGRectMake(60, 80, 200, 30)];
    [slider setMaximumValue:1.0];
    [slider setMinimumValue:0.0];
    [slider setValue:0.5];
    [slider addTarget:self action:@selector(sliderChanged:)  forControlEvents:UIControlEventValueChanged];

    if (self.capturedImages.count > 0)
    
        [imagePickerController.cameraOverlayView addSubview:self.overlayImage];
        [imagePickerController.cameraOverlayView addSubview:slider];
    


self.imagePickerController = imagePickerController;
[self presentViewController:self.imagePickerController animated:YES completion:nil];

【问题讨论】:

【参考方案1】:

在您的代码示例中,我无法在任何地方看到设置 self.imageView.frame。如果我理解正确,这就是问题所在。

【讨论】:

谢谢,我试过 self.imageView.frame = CGRectMake(0, 0, 200, 200);还有 self.overlayView.frame = CGRectMake(0, 0, 200, 200);他们都没有解决我的问题,每次拍照都是原始尺寸 如果手动设置框架没有帮助,这意味着你有auto-layout on。【参考方案2】:

解决了!简单:

self.overlayImage.image = self.imageView.image;

代替:

self.overlayImage = self.imageView;

【讨论】:

以上是关于如何设置合适的 UIImageView 大小的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UIImageView 尊重它的 superview.layer.mask

UIImageView 没有动画

Playground,无法将同一个 UIImageView 设置为多个 UIView

Objective-C:捕获后使用原始图像大小

如何相对于原始图像大小比设置 UIimageview 宽度

使 UIImageView 及其 UIImage 按比例缩放而无需额外的填充