2016年5月29日 星期日

[IOS] 圖片遮罩 MASK


有時候一張圖片可能沒有要全部完整顯示,會根據不同的情形選用不同的解法

今天要介紹的是用另外張圖片來遮罩另外一張圖片





我遮罩圖用這張














圖片選用這張












效果出來會是這樣
















  1.     CALayer *maskInfo = [CALayer layer];
  2.     mask.contents = (id)[[UIImage imageNamed:@"MASK.png"] CGImage];
  3.     mask.frame = CGRectMake(0, 0, self.imageForMask.frame.size.width, self.imageForMask.frame.size.height);
  4.     self.imageForMask.layer.mask = mask;
  5.     self.imageForMask.layer.masksToBounds = YES;



只要這樣就完成啦!!!

ps. 遮罩是利用透明度去遮罩跟顏色無關,也就是會把透明度為0的去掉,保留透明度不為0的部分



額外進階

又要遮罩又要旋轉

旋轉功能詳細請看上篇網誌

  1.         UIView *view = self.imagePhoto;
  2.         CALayer *mask = [CALayer layer];
  3.         mask.contents = (id)[[UIImage imageNamed:@"MASK.png"] CGImage];
  4.         mask.frame = CGRectMake(0, 0, self. imagePhoto.frame.size.width, self. imagePhoto.frame.size.height);
  5.         
  6.         float centerX = view.bounds.size.width/2;
  7.         float centerY = view.bounds.size.height/2;
  8.         float x = view.bounds.size.width;
  9.         float y = view.bounds.size.height;
  10.         //GetCGAffineTransformRotateAroundPoint(centerX,centerY ,45.0/180.0*M_PI)
  11.         CGAffineTransform trans = [self GetCGAffineTransformRotateAroundPoint:centerX :centerY :x :y :(-40.0f * (M_PI / 180.0f))];
  12.         view.transform = CGAffineTransformIdentity;
  13.         view.transform = trans;
  14.         view.layer.allowsEdgeAntialiasing = YES;
  15.         
  16.         view = self.imageBgLeft;
  17.         centerX = view.bounds.size.width/2;
  18.         centerY = view.bounds.size.height/2;
  19.         x = view.bounds.size.width;
  20.         y = view.bounds.size.height;
  21.         trans = [self GetCGAffineTransformRotateAroundPoint:centerX :centerY :x :y :(-40.0f * (M_PI / 180.0f))];
  22.         view.transform = CGAffineTransformIdentity;
  23.         view.transform = trans;
  24.         view.layer.allowsEdgeAntialiasing = YES;

  25.         
  26.         self. imagePhoto.layer.mask = mask;
  27.         self. imagePhoto.layer.masksToBounds = YES;



主要關鍵在於

先把frame給遮罩,要在旋轉之前,否則就會因為旋轉後frame不一樣會不好對到位置


 //***************************************************

另外提一下把view縮小可以這樣使用



self.view.transform = CGAffineTransformMakeScale(0.5, 0.5);

這樣就可以縮小囉~

當然也可以放大,比例自己再去調整囉~


沒有留言:

張貼留言