CGImage! массив не заполняется
Вот класс, который размывает представление. Я знаю, в iOS8 появился новый UIVisualEffectView
, но я нацеливаюсь на iOS7.
У меня проблема с массивом, не заполненным CGImage! объекты. Код работает до конца func decreasinglyBlurredImages()
после этого я получаю эту ошибку:
0x410fc4: cmp r6, #0x0
0x410fc8: beq 0x411004 ; partial apply forwarder for Swift._ContiguousArrayBuffer.(_asCocoaArray <A>(Swift._ContiguousArrayBuffer<A>) -> () -> Swift._CocoaArray).(closure #1) with unmangled suffix "340" + 164
0x410fcc: ldr r0, [r5]
0x410fd0: mov r1, r4
0x410fd4: ldr r2, [r0, #12]
0x410fd8: mov r0, sp
0x410fdc: blx r2
0x410fe0: ldr r0, [r5]
0x410fe4: mov r1, r4
0x410fe8: ldr r2, [r0, #16]
0x410fec: mov r0, r8
0x410ff0: blx r2
0x410ff4: mov r0, r6
0x410ff8: sub sp, r7, #0x10
0x410ffc: ldr r8, [sp], #4
0x411000: pop {r4, r5, r6, r7, pc}
0x411004: trap Thread:3 EXE_BREAKPOINT ....
Внизу в значительной степени весь код для этого класса. Я просто пытался предварительно заполнить массив ради скорости и столкнулся с этой проблемой. Интересная заметка, если я изменюсь optBlurredImagesForAnimation
в UIImage
и сделать это:
func decreasinglyBlurredImages()->[UIImage]
{
var images:[UIImage] = []
for var i = numberOfImagesForAnimation; i > -1; i--
{
var blurredImageForAnimation:UIImage = UIImage(CGImage: blurImage(i))
images.append(blurredImageForAnimation)
}
return images
}
все работает! Тем не менее, я бы в конечном итоге хотел бы использовать этот массив CGImages
в CAKeyFrameAnimation
так что мне нужно CGImages
,
Код прикрепления:
import UIKit
import Foundation
import QuartzCore
class AEBlurryImage: UIView {
let imageToBlur:UIImage
let blurFactor:NSNumber
let numberOfImagesForAnimation = 10
let buttonTitle:String?
var optBlurredImagesForAnimation:[CGImage!]?
init(frame: CGRect, image:UIImage, blurFactor:NSNumber)
{
imageToBlur = image
if blurFactor == 0
{
self.blurFactor = self.numberOfImagesForAnimation
}else
{
self.blurFactor = blurFactor
}
super.init(frame: frame)
}
func displayBlurredImage()
{
var blurredImage:CGImage!
//get the blurred image and add it to the layer
blurredImage = self.blurImage(nil)
self.layer.contents = blurredImage
if let blurredImagesForAnimation = optBlurredImagesForAnimation
{
return
}else{
let imageQueue:dispatch_queue_t = dispatch_queue_create("iQ", DISPATCH_QUEUE_SERIAL)
dispatch_async(imageQueue){
self.optBlurredImagesForAnimation = self.decreasinglyBlurredImages()
}
}
}
func blurImage(optionalFactor:NSNumber?)->CGImage!
{
var context:CIContext = CIContext(options:nil)
var image:CIImage = CIImage(image:imageToBlur)
var filterName:String? = "CIGaussianBlur"
var filter:CIFilter = CIFilter(name:filterName)
filter.setValue(image, forKey: kCIInputImageKey)
//if optionalFactor is nil, just use the blurFactor
if var factor = optionalFactor
{
filter.setValue(factor, forKey:kCIInputRadiusKey)
}else
{
filter.setValue(blurFactor, forKey: kCIInputRadiusKey)
}
var result:CIImage = filter.outputImage
var rect:CGRect = result.extent()
var cgImage:CGImage! = context.createCGImage(result, fromRect: rect)
var blurredImage:CGImage! = cgImage
return blurredImage
}
func decreasinglyBlurredImages()->[CGImage!]
{
var images:[CGImage!] = []
for var i = numberOfImagesForAnimation; i > -1; i--
{
var blurredImageForAnimation:CGImage! = self.blurImage(i)
images.append(blurredImageForAnimation)
}
return images
}
}
1 ответ
Я думаю, что я понял свою проблему. Проблема была с устройством, которое я использовал для разработки. Устройство iPhone 5 с установленной iOS7, а не iOS8. Этот код прекрасно работает в симуляторе, и Рикклс сказал, что это, в конце концов, взломало его для меня. Еще раз спасибо!