2016-05-23 2 views
0

Не знаете, где искать это, но я хочу создать полупрозрачную маску вида или слоя, которые могут перемещаться, изменять непрозрачность и иметь несколько на экране сразу, что перекрывается.Полупрозрачная динамическая маска на динамическом UIView

Что-то этот эффект:

enter image description here

Где два маленьких окна могут перемещаться и изменять непрозрачность цвета.

Я пробовал с маской CALayer, но это просто пробивает, поэтому я добавил CAShapeLayer в отверстие, но вы можете видеть края. Я попытался использовать allowsEdgeAntialiasing на CAShapeLayer, но это, похоже, не сработало.

Другие примеры Я видел только работу с UIImageViews, потому что они используют два UIImageViews друг на друга, чтобы получить эффект. К сожалению, мне нужно это для работы над любым типом UIView.

Я также пробовал использовать CGBlendMode.SourceOut, который хорошо работает, за исключением того, что перекрывающиеся области легче, что делает общий смысл, но не тем, что мне нужно.

let blendMode = CGBlendMode.SourceOut 

CGContextSaveGState(context) 

CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.75).CGColor) 
CGContextFillRect(context, rect) 

CGContextSetBlendMode(context, blendMode) 

CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.25).CGColor) 
CGContextFillRect(context, CGRectMake(0, 500, 60, 50)) 

CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 1).CGColor) 
CGContextFillRect(context, CGRectMake(0, 550, 60, 50)) 

Последние два заполнения прямоугольникам перекрываются и первым, чтобы установить весь вид иметь полупрозрачные наложения.

ответ

0

Похоже, вы можете использовать режимы смешивания:

  • Нормальных для фона
  • Clear для отверстий для квадратов
  • Нормальных снова для квадратов, чтобы дать Перекрытие посмотреть

enter image description here

Это, как представляется, не показывает края вокруг квадраты, когда второе окно установлено в тот же альфа как фон

enter image description here

Этот код создает верхнее изображение (называемое в DrawRect):

CGContextSetBlendMode(context, CGBlendMode.Normal) 
CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.75).CGColor) 
CGContextFillRect(context, rect) 

CGContextSetBlendMode(context, CGBlendMode.Clear) 
CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 1).CGColor) 
CGContextFillRect(context, CGRectMake(20, 150, 100, 100)) 
CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 1).CGColor) 
CGContextFillRect(context, CGRectMake(50, 200, 100, 100)) 

CGContextSetBlendMode(context, CGBlendMode.Normal) 
CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.25).CGColor) 
CGContextFillRect(context, CGRectMake(20, 150, 100, 100)) 
CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.15).CGColor) 
CGContextFillRect(context, CGRectMake(50, 200, 100, 100))