Ron*_*iew 338 cocoa-touch objective-c
我有一个UIImageView,目标是通过给它一个高度或宽度按比例缩小它.
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
//Add image view
[self.view addSubview:imageView];   
//set contentMode to scale aspect to fit
imageView.contentMode = UIViewContentModeScaleAspectFit;
//change width of frame
CGRect frame = imageView.frame;
frame.size.width = 100;
imageView.frame = frame;
图像确实调整了大小但位置不在左上角.缩放image/imageView的最佳方法是什么?如何更正位置?
小智 540
一旦我找到文档,很容易修复!
 imageView.contentMode = UIViewContentModeScaleAspectFit;
Jan*_*les 78
我刚试过这个,UIImage不支持_imageScaledToSize.
我最后使用一个类别向UIImage添加了一个方法 - 我在Apple Dev论坛上发现了一个建议.
在项目范围内.h -
@interface UIImage (Extras)
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize;
@end;
执行:
@implementation UIImage (Extras)
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {
    UIImage *sourceImage = self;
    UIImage *newImage = nil;
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
    if (CGSizeEqualToSize(imageSize, targetSize) == NO) {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;
        if (widthFactor < heightFactor) 
            scaleFactor = widthFactor;
        else
            scaleFactor = heightFactor;
        scaledWidth  = width * scaleFactor;
        scaledHeight = height * scaleFactor;
        // center the image
        if (widthFactor < heightFactor) {
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        } else if (widthFactor > heightFactor) {
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
        }
    }
    // this is actually the interesting part:
    UIGraphicsBeginImageContext(targetSize);
    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;
    [sourceImage drawInRect:thumbnailRect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    if(newImage == nil) NSLog(@"could not scale image");
    return newImage ;
}
@end;
Li-*_* Wu 38
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
Chr*_*die 30
您可以尝试使imageView大小匹配image.以下代码未经过测试.
CGSize kMaxImageViewSize = {.width = 100, .height = 100};
CGSize imageSize = image.size;
CGFloat aspectRatio = imageSize.width / imageSize.height;
CGRect frame = imageView.frame;
if (kMaxImageViewSize.width / aspectRatio <= kMaxImageViewSize.height) 
{
    frame.size.width = kMaxImageViewSize.width;
    frame.size.height = frame.size.width / aspectRatio;
} 
else 
{
    frame.size.height = kMaxImageViewSize.height;
    frame.size.width = frame.size.height * aspectRatio;
}
imageView.frame = frame;
neo*_*eye 13
一个人可以通过这种方式调整UIImage的大小
image = [UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp];
Nat*_*ink 13
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
//set contentMode to scale aspect to fit
imageView.contentMode = UIViewContentModeScaleAspectFit;
//change width of frame
//CGRect frame = imageView.frame;
//frame.size.width = 100;
//imageView.frame = frame;
//original lines that deal with frame commented out, yo.
imageView.frame = CGRectMake(10, 20, 60, 60);
...
//Add image view
[myView addSubview:imageView]; 
发布在顶部的原始代码在iOS 4.2中适用于我.
我发现创建一个CGRect并指定所有top,left,width和height值是在我的情况下调整位置的最简单方法,即在表格单元格中使用UIImageView.(仍然需要添加代码来释放对象)
小智 9
这对我来说很好用Swift 2.x:
imageView.contentMode = .ScaleAspectFill
imageView.clipsToBounds = true;
对于Swift:
self.imageViews.contentMode = UIViewContentMode.ScaleToFill
的UIImageView + Scale.h:
#import <Foundation/Foundation.h>
@interface UIImageView (Scale)
-(void) scaleAspectFit:(CGFloat) scaleFactor;
@end
的UIImageView + Scale.m:
#import "UIImageView+Scale.h"
@implementation UIImageView (Scale)
-(void) scaleAspectFit:(CGFloat) scaleFactor{
    self.contentScaleFactor = scaleFactor;
    self.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
    CGRect newRect = self.frame;
    newRect.origin.x = 0;
    newRect.origin.y = 0;
    self.frame = newRect;
}
@end
小智 0
我认为你可以做类似的事情
image.center = [[imageView window] center];
| 归档时间: | 
 | 
| 查看次数: | 330067 次 | 
| 最近记录: |