Objective c 在ios中构建缩略图条带

Objective c 在ios中构建缩略图条带,objective-c,ios,uiimage,thumbnails,Objective C,Ios,Uiimage,Thumbnails,我正在尝试构建一个缩略图条带-我想动态地将30x30的图像添加到条带中,因为它们是从web上的源代码惰性下载的 由于某些原因,图像被绘制在错误的宽度上。我看到他们在整个条纹上伸展,而不是停留在30x30 我希望缩略图条纹的高度为40,宽度为40xNum_ 下载每个图像后,我将其大小调整为30x30,然后我将其称为: + (UIImage *) addThumbImage:(UIImage *)thumb toStripe:(UIImage *)stripe atIndex:(NSInteger)

我正在尝试构建一个缩略图条带-我想动态地将30x30的图像添加到条带中,因为它们是从web上的源代码惰性下载的

由于某些原因,图像被绘制在错误的宽度上。我看到他们在整个条纹上伸展,而不是停留在30x30

我希望缩略图条纹的高度为40,宽度为40xNum_

下载每个图像后,我将其大小调整为30x30,然后我将其称为:

+ (UIImage *) addThumbImage:(UIImage *)thumb toStripe:(UIImage *)stripe atIndex:(NSInteger)index
{

    CGSize size = CGSizeMake((index)*40, 40);
    if(UIGraphicsBeginImageContextWithOptions != NULL) {

    UIGraphicsBeginImageContextWithOptions(size, NO,  ([ UIScreen mainScreen ].scale));
}
else {
    UIGraphicsBeginImageContext(size);
}

    // first, drawing the stripe we got till now
    CGPoint stripePoint = CGPointMake(0, 0);
    [stripe drawAtPoint:stripePoint];

    //now adding the new thumbnail
    //CGPoint thumbPoint = CGPointMake((index-1)*40+5, 5);
    NSUInteger locX = (index-1)*40+5;
    CGRect newRect = CGRectMake(locX, 5, 30, 30);
    [thumb drawInRect:newRect];

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return result;

}
  • 我知道,在我将图像发送到该功能之前,图像的大小已正确调整为30x30
  • 我想问题出在某个地方。。。它在整个图像上下文中绘制它
编辑:更多的澄清 条纹用于显示我的应用程序中的照片缩略图。它应该看起来有点像你在ipad的照片应用程序中看到的。我之所以需要“动态”构建它,是因为我的照片数量未知——这取决于服务器端正在发生的事情。照片可以添加或删除,所以我需要的条纹是动态的。在服务器中添加/删除照片后,我将相应地更新应用程序中的条纹。 我编辑了代码以包含UIGraphic..withOptions和withoutOptions,并添加了正确的比例

我想你想要

// I find this more convenient/readable than CGSizeMake:
CGSize size = { (index + 1) * 40.0f, 40.0f } ;
(如果考虑insert at index=0的情况,代码大小将为{0,40})。还有,为什么不让locX成为浮子呢

float locX = index * 40.0f + 5.0f ;
CGRect newRect = { { locX, 5.0f }, { 30.0f, 30.0f } } ;
那么,也许你有一个错误?

我想你想要

// I find this more convenient/readable than CGSizeMake:
CGSize size = { (index + 1) * 40.0f, 40.0f } ;
(如果考虑insert at index=0的情况,代码大小将为{0,40})。还有,为什么不让locX成为浮子呢

float locX = index * 40.0f + 5.0f ;
CGRect newRect = { { locX, 5.0f }, { 30.0f, 30.0f } } ;

那么,您可能有一个错误?

好的。多亏了@nielsbot,我才发现了问题所在: 我有一个UIImageView的IBOutlet,我把缩略图更新后的图像放在里面。 但是我从来没有根据条纹的大小更新UIImageview的大小,所以发生的是图像被拉伸了。。。这么简单,我错过了


谢谢尼尔斯波特。谢谢你。你又做了一次;)

好的。多亏了@nielsbot,我才发现了问题所在: 我有一个UIImageView的IBOutlet,我把缩略图更新后的图像放在里面。 但是我从来没有根据条纹的大小更新UIImageview的大小,所以发生的是图像被拉伸了。。。这么简单,我错过了


谢谢尼尔斯波特。谢谢你。你又做了一次;)

不,不是这样的。。。我只是试着根据你的建议修改代码-得到了确切的结果。当然,我也更新了索引,以便用正确的号码拨打电话。还有其他想法吗?:)您需要将比例传递给UIGraphicsBeginImageContextWithOptions!它应该是1.0/2.0。如果条带没有任何透明度,您可以使用([UIScreen mainScreen].scale),最后,您可以使用UIGraphicsBeginImageContext()——您使用条带的目的是什么?缩略图的最大数量是多少?此外,每次向条带图像添加缩略图时创建新条带图像可能会导致性能问题。你能通过使用带缩略图的+(UIImage*)StripeImage:(NSArray*)拇指在一次操作中创建条纹图像吗?嗯。你是如何在屏幕上绘制条纹的?不是这样的。。。我只是试着根据你的建议修改代码-得到了确切的结果。当然,我也更新了索引,以便用正确的号码拨打电话。还有其他想法吗?:)您需要将比例传递给UIGraphicsBeginImageContextWithOptions!它应该是1.0/2.0。如果条带没有任何透明度,您可以使用([UIScreen mainScreen].scale),最后,您可以使用UIGraphicsBeginImageContext()——您使用条带的目的是什么?缩略图的最大数量是多少?此外,每次向条带图像添加缩略图时创建新条带图像可能会导致性能问题。通过使用带缩略图的+(UIImage*)StripeImage:(NSArray*)拇指,您能否在一次操作中创建条带图像?嗯,您如何在屏幕上绘制条带?