Я пытаюсь замаскировать изображение чем-то вроде этого:
Не могли бы вы мне помочь?
Я использую этот код:
- (void) viewDidLoad {
UIImage *OrigImage = [UIImage imageNamed:@"dogs.png"];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
UIImage *maskedImage = [self maskImage:OrigImage withMask:mask];
myUIIMage.image = maskedImage;
}
ios
objective-c
uiimage
mask
Mc.Lover
источник
источник
Ответы:
Есть способ попроще.
Для Swift 4 и плюс выполните код ниже
источник
viewDidLoad
но ничего не произошло!В учебнике используется этот метод с двумя параметрами:
image
иmaskImage
, которые вы должны установить при вызове метода. Пример вызова может выглядеть так, если метод находится в том же классе, а изображения находятся в вашем пакете:Обратите внимание: изображения даже не обязательно должны быть одинакового размера.
После того, как вы предоставили свой код, я добавил несколько цифр в качестве комментариев к нему для справки. У вас еще есть два варианта. Все это - метод, который вы куда-то вызываете. Вам не нужно создавать изображения внутри него: это сводит к нулю возможность повторного использования метода.
Чтобы ваш код заработал. Измените заголовок методов ( 1. ) на
Затем измените имя переменной в 2. на
Метод вернет ваши замаскированные изображения, поэтому вам придется вызывать этот метод в каком-то месте. Вы можете показать нам код, в котором вызываете свой метод?
источник
UIImage *image
код? !!! потому что-(UIimage *) maskeImage
компилятор выдает ошибку переопределения!Swift 3 - простейшее решение, которое я нашел
Я создал
@IBDesignable
для этого, чтобы вы могли сразу увидеть эффект на своей раскадровке.Как пользоваться
пример
Ноты
источник
Я пробовал оба кода, используя CALayer или CGImageCreateWithMask, но ни один из них не работал у меня
Но я обнаружил, что проблема в формате файла png, а НЕ в коде !!
так что просто хочу поделиться своим открытием!
Если вы хотите использовать
вы должны использовать 24-битный png без альфа-канала
Если вы хотите использовать маску CALayer, вы должны использовать (24-битный или 8-битный) png с альфа-каналом, где прозрачная часть вашего png будет маскировать изображение (для альфа-маски с плавным градиентом .. используйте 24-битный png с альфа-каналом)
источник
У меня это работает.
источник
SWIFT 3 XCODE 8.1
// для использования
источник
Быстрая версия принятого решения:
На всякий случай кому-то это нужно.
У меня работает безупречно.
источник
Мы обнаружили, что этот правильный ответ сейчас не работает, и реализовали небольшой подключаемый класс, который помогает замаскировать любое изображение в UIImageView.
Он доступен здесь: https://github.com/Werbary/WBMaskedImageView
Пример:
источник