2012-12-13 34 views
1

我正在使用自定义进度条来显示基于百分比值的图像的一部分。我的想法是有两个图像,原始版本和版本。我正在显示b & w,并且基于原始图像的百分比来裁剪。工作很好,但从上到下。使用图像的自定义进度条

我想问一下,有什么办法可以让原始图像从下到上“成长”?

下面是我的代码示例到现在为止:

UIImageView *imgDefViewGray = [[UIImageView alloc] initWithFrame:CGRectMake(170, 85, 60, 60)]; 
    imgDefViewGray.image = [UIImage imageNamed:@"castle-gray.png"]; 
    [self addSubview:imgDefViewGray]; 

    UIImageView *imgDefView = [[UIImageView alloc] initWithFrame:CGRectMake(170, 85, 60, 60)]; 
    imgDefView.image = [UIImage imageNamed:@"castle.png"]; 

    CGRect rect = CGRectMake(0, 0 , 60, **50**); 
    CGImageRef imageRef = CGImageCreateWithImageInRect([imgDefView.image CGImage], rect); 
    UIImage *img = [UIImage imageWithCGImage:imageRef]; 

    imgDefView = [[UIImageView alloc] initWithFrame:CGRectMake(170, 85, 60, **50**)]; 
    imgDefView.image = img; 
    [self addSubview:imgDefView]; 

因此,通过改变大胆(双星号)的价值,我已经实现了裁剪的原始图像,就像我想,但方向顶部 - >底部。我希望它底部 - >顶部。

在此先感谢

回答

1

多次尝试之后,我想通了,得到我想要的结果。以下是我解决我的问题的方法。我希望将来有谁会面对或想要同样的事物会发现它有用。

UIImageView *imgDefViewGray = [[UIImageView alloc] initWithFrame:CGRectMake(170, 85, 60, 60)]; 
    imgDefViewGray.image = [UIImage imageNamed:@"castle-gray.png"];//60x60 b&w image 

    UIImage originalImg = [UIImage imageNamed:@"castle.png"];//60x60 original image 
    CGRect rect = CGRectMake(0, originalImg.size.height-scaleDefence), 60 , scaleDefence);//scaleDefence is just a float variable that converts current percentage value to px. 

    CGImageRef imageRef = CGImageCreateWithImageInRect([originalImg CGImage], rect); 
    UIImage *croppedImg = [UIImage imageWithCGImage:imageRef]; 

    UIImageView *imgDefView = [[UIImageView alloc] initWithFrame:CGRectMake(0, originalImg.size.height-scaleDefence, 60, scaleDefence)];//dynamically changing y-axis depending on cropped image's height. 
    imgDefView.image = croppedImg; 

    [imgDefViewGray addSubview:imgDefView];//make original image part of b&w 
    [self addSubview:imgDefViewGray];//finally add the result to the view 
+0

优秀的一段代码。我想问你如何计算scaleDefence变量?它是像图像高度的10%还是什么? –

+0

你好@AkashMalhotra。谢谢你的好话。如代码块中所述,scaleDefence是当前防御与浮点数之间的对话,用于覆盖适当的图像区域。正如你已经正确提到的是原始图像高度的区域。如果当前的防守是10%,那么将覆盖原始图像高度的10%。如果您发现我的解决方案有用,请投票或将其标记为已接受。会真的帮助我。快乐编码:) – OutOfBoundsException

+0

我用你的代码在后台线程以及主要,但我似乎无法正确显示动画,我的意思是它直接显示更新的彩色图像重叠,而不是慢慢更新它从黑/白到彩色。我用wait(),sleep()但无济于事。你能帮我吗? –