UIView设置不透明度问题

时间:2013-05-18 07:04:09

标签: iphone ios objective-c uiview quartz-2d

我想为UIView中的不同像素设置不同的不透明度。

所以,我需要在代码中找到方法[self setProperOpacity:myView forX:x forY:y];的实现(这样函数应该为正确的像素设置alfa值):

for (int x = 0; x < 320; x++)
{
     for (int y = 0; y < 460; y++)
     {
         [self setProperOpacity:myView forX:x forY:y];
     }
}

我将对任何实施方法[self setProperOpacity:myView forX:x forY:y];

表示感谢

1 个答案:

答案 0 :(得分:0)

我猜你的视图最初是用黑色填充的,你想要将一些像素清除为透明。为此,您需要使用核心图形方法。根据您希望代码的位置以及您希望如何执行此操作,以下代码可以在视图的drawRect中使用,也可以创建掩蔽图像(您需要根据需要获取上下文):

CGContextRef ctx = ...;

CGContextSetFillColorWithColor(ctx, [UIColor blackColor].CGColor);
CGContextSetBlendMode(ctx, kCGBlendModeNormal); 
CGContextFillRect(ctx, CGRectMake(0, 0, 320, 460));

// CGContextSetBlendMode(ctx, kCGBlendModeClear); // if you want to clear
CGContextSetFillColorWithColor(ctx, [[UIColor blackColor] colorWithAlphaComponent:0].CGColor);

for (int x = 0; x < 320; x++)
{
  for (int y = 0; y < 460; y++)
  {
     CGContextFillRect(ctx, CGRectMake(x, y, 1, 1));
  }
}

答案是基于这样一种想法,即你在其他图像的顶部(在后面的另一个视图中)有一个部分透明的视图,你试图掩盖它。如果您只是拥有图像并且不想要多个视图,那么您可以(在drawRect中)将图像绘制到上下文中,然后遍历不应该透明的像素使用上面的代码将它们涂成另一种颜色。