我正在制作一个触摸移动项目我想在触摸点更改图像的 alpha 或可见性(尽可能)。可以说取消隐藏图像的特定点..
PS我已经知道如何删除图像。我正在寻找 unerase
我正在制作一个触摸移动项目我想在触摸点更改图像的 alpha 或可见性(尽可能)。可以说取消隐藏图像的特定点..
PS我已经知道如何删除图像。我正在寻找 unerase
我认为这个项目完全符合您的要求:https ://github.com/SebastienThiebaud/STScratchView
您有 2 张图像,其中一张是隐藏图像,另一张是您刮掉的图像。
甚至这个项目: http: //www.cocoacontrols.com/platforms/ios/controls/scratch-n-see
我很抱歉没有一个好的代码格式,因为它们是从我的博客中复制的。我花了很多时间来编辑。
当你的手指移动时,擦除一些部分:
- (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;}
获取被触摸的点,然后用被触摸的点计算一个圆,最后改变圆中像素的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);}
我希望以上内容会有所帮助。有趣的问题,我想稍后做一个可运行的演示。
- (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);
}
你为什么不在顶部放置一个填充颜色或纹理的空视图,然后使用@AnkitSrivastava 回答让触摸擦掉视图背景的一部分,露出背后隐藏的图像。
我相信 alpha 是整个视图的属性,所以你所能做的就是利用那个特定的点......参考这可能是你想要实现的目标。
-(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;
}