2

我正在制作一个触摸移动项目我想在触摸点更改图像的 alpha 或可见性(尽可能)。可以说取消隐藏图像的特定点..

PS我已经知道如何删除图像。我正在寻找 unerase

4

6 回答 6

2

我认为这个项目完全符合您的要求:https ://github.com/SebastienThiebaud/STScratchView

您有 2 张图像,其中一张是隐藏图像,另一张是您刮掉的图像。

甚至这个项目: http: //www.cocoacontrols.com/platforms/ios/controls/scratch-n-see

于 2013-01-07T00:22:41.920 回答
1

我很抱歉没有一个好的代码格式,因为它们是从我的博客中复制的。我花了很多时间来编辑。

1 隐藏您触摸的部分。

当你的手指移动时,擦除一些部分:

- (UIImage *)erasePartsMoved {
UIImage *image = nil;
UIColor *color = [UIColor whiteColor];
CGFloat width = 5.0f;
CGSize imageContextSize = self.imageView.frame.size;

UIGraphicsBeginImageContext(imageContextSize);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(context, width);
CGContextSetStrokeColorWithColor(context, [color CGColor]);

CGContextMoveToPoint(context, self.touchStartPoint.x, self.touchStartPoint.y);
//Do something needed.
CGContextAddLineToPoint(context, self.touchEndPoint.x, self.touchEndPoint.y);

CGContextStrokePath(context);

image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
return image;}

2 您的图像一开始是不可见的,例如透明的。

获取被触摸的点,然后用被触摸的点计算一个圆,最后改变圆中像素的alpha:

typedef struct _singleRGBA{
unsigned char red;
unsigned char green;
unsigned char blue;
unsigned char alpha;} RGBA;

要更改像素的 alpha :

void filterOpacity(UInt8 *pixelBuf, UInt32 offset, void *context){
double val = *((double*)context);
int a = offset+3;
int alpha = pixelBuf[a];
pixelBuf[a] = SAFECOLOR(alpha * val);}

我希望以上内容会有所帮助。有趣的问题,我想稍后做一个可运行的演示。

于 2013-01-07T04:18:25.217 回答
0
 - (void)viewDidLoad
 {
    //load super view
    [super viewDidLoad];

    //to decrease alpha. 
    UISwipeGestureRecognizer *swiperight=[[UISwipeGestureRecognizer  alloc]     
     initWithTarget:self action: @selector(setalpha_decrease:)];
    [swiperight setDirection:UISwipeGestureRecognizerDirectionRight];
    [self.view addGestureRecognizer:swiperight];

    //to increase alpha.     
    UISwipeGestureRecognizer *swipeleft=[[UISwipeGestureRecognizer  alloc] 
    initWithTarget:self action: @selector(setalpha_increase:)];
    [swipeleft setDirection:UISwipeGestureRecognizerDirectionLeft];
    [self.view addGestureRecognizer:swipeleft];



  }


  -(void) setalpha_decrease:(UIPanGestureRecognizer *) gestureRecognizer {

    imgview.alpha= imgtomove.alpha-(imgtomove.alpha/10);
  }



  -(void) setalpha_increase:(UIPanGestureRecognizer *) gestureRecognizer {

    imgview.alpha= imgtomove.alpha+(imgtomove.alpha/10);

  }
于 2013-01-02T11:33:48.820 回答
0

你为什么不在顶部放置一个填充颜色或纹理的空视图,然后使用@AnkitSrivastava 回答让触摸擦掉视图背景的一部分,露出背后隐藏的图像。

于 2013-01-05T15:04:28.990 回答
0

我相信 alpha 是整个视图的属性,所以你所能做的就是利用那个特定的点......参考这可能你想要实现的目标。

于 2012-12-28T11:31:17.387 回答
-1
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *t = [[touches allObjects] objectAtIndex:0];
    float alpha = [t locationInView:self.view].x / self.view.frame.size.width;
    _img.alpha = alpha;
}
于 2013-01-03T13:11:25.630 回答