Маска UIImage iOS 8

Я использую для маскирования uiimages в iOS 7, используя следующий код, который отлично работает. Но теперь, в iOS 8, он ничего не делает, вместо того, чтобы вернуть мне исходное изображение + маску, он возвращает мне черное изображение.

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { CGImageRef imgRef = [image CGImage]; CGImageRef maskRef = [maskImage CGImage]; CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, false); CGImageRef masked = CGImageCreateWithMask(imgRef, actualMask); return [UIImage imageWithCGImage:masked]; 

}

Вот как работает мое приложение: – оригинальное изображение будет размытым – тогда применяется маска (круг, квадрат, любая форма, которая является .png изображением) – возвращает размытое изображение, а маска должна обрезать размытое изображение и видеть позади оригинальное изображение без размытия. он работает на iOS 7, но в iOS 8 код о маскировке (выше) не работает. есть идеи?

  • SDK Google Maps для iOS и маршрутов
  • Почему класс NSString нечетко повторяется при форматировании чисел?
  • Как округлить CGFloat
  • UIButton не получает прикосновений, когда супервизор имеет положение
  • SLComposeViewController для Twitter теперь сбой в iOS 8.3
  • как запретить базовый метод init в NSObject
  • Нечетное преобразование между UIColor и CGColor
  • Почему NULL требуется приведение типов в блоки?
  • One Solution collect form web for “Маска UIImage iOS 8”

    Используйте этот метод для маскировки изображения в iOS 8.0. Я также использовал этот метод в моем рабочем коде и отлично работал.

     - (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { CGImageRef imgRef = [image CGImage]; CGImageRef maskRef = [maskImage CGImage]; int maskWidth = CGImageGetWidth(maskRef); int maskHeight = CGImageGetHeight(maskRef); // round bytesPerRow to the nearest 16 bytes, for performance's sake int bytesPerRow = (maskWidth + 15) & 0xfffffff0; int bufferSize = bytesPerRow * maskHeight; // allocate memory for the bits CFMutableDataRef dataBuffer = CFDataCreateMutable(kCFAllocatorDefault, 0); CFDataSetLength(dataBuffer, bufferSize); // the data will be 8 bits per pixel, no alpha CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceGray(); CGContextRef ctx = CGBitmapContextCreate(CFDataGetMutableBytePtr(dataBuffer), maskWidth, maskHeight, 8, bytesPerRow, colourSpace, kCGImageAlphaNone); // drawing into this context will draw into the dataBuffer. CGContextDrawImage(ctx, CGRectMake(0, 0, maskWidth, maskHeight), maskRef); CGContextRelease(ctx); // now make a mask from the data. CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(dataBuffer); CGImageRef mask = CGImageMaskCreate(maskWidth, maskHeight, 8, 8, bytesPerRow, dataProvider, NULL, FALSE); CGDataProviderRelease(dataProvider); CGColorSpaceRelease(colourSpace); CFRelease(dataBuffer); CGImageRef masked = CGImageCreateWithMask(imgRef, mask); return [UIImage imageWithCGImage:masked]; } 
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.