效果:
整个策划栏的实现,其实就是将一个包含tableview的view添加到了window上。
self.window?.addSubview(sliderViewController.view)
使用起来很方便,这里重点介绍下,显示一半弹出动画,以及底部整体模糊效果。
func sliderVCDismiss(taptouch:UITapGestureRecognizer){
UIView.animateWithDuration(0.5, animations: {()->Void in
self.contentView.frame = CGRectMake(-DEVICE_SCREEN_WIDTH*0.6, 0, DEVICE_SCREEN_WIDTH*0.6, DEVICE_SCREEN_HEIGHT)
self.contentView.alpha = 0.9
}, completion: {(finished:Bool)->Void in
// 回调viewcontroller方法
self.view.hidden=true
// self.view.removeFromSuperview()
})
}
模糊效果:
func sliderViewAnimStart(mblock:sliderVCtoViewcontrollerBlock){
// UIImageWriteToSavedPhotosAlbum(blurimageFromImage(imageFromUIView(bgView)), nil, nil, nil)
sliderblock = mblock
var windowview:UIView = UIView()
var keywindown:UIView = UIView()
windowview = UIApplication.sharedApplication().keyWindow!.rootViewController!.view
keywindown = UIApplication.sharedApplication().keyWindow!
blurView?.layer.contents = blurimageFromImage(imageFromUIView(windowview)).CGImage
UIView.animateWithDuration(0.5, animations: {()->Void in
self.contentView.frame = CGRectMake(0, 0, DEVICE_SCREEN_WIDTH*0.6, DEVICE_SCREEN_HEIGHT)
self.contentView.alpha = 0.9
}, completion: {(finished:Bool)->Void in
})
}
func blurimageFromImage(image:UIImage)->UIImage{
var blurRadix:UInt32 = 7
var img:CGImageRef = image.CGImage
var inProvider:CGDataProviderRef = CGImageGetDataProvider(img)
var bitmapdata:CFDataRef = CGDataProviderCopyData(inProvider)
var inputBuffer:vImage_Buffer = vImage_Buffer()
inputBuffer.data=(UnsafeMutablePointer<Void>)(CFDataGetBytePtr(bitmapdata))
inputBuffer.width=(vImagePixelCount)(CGImageGetWidth(img))
inputBuffer.height=(vImagePixelCount)(CGImageGetHeight(img))
inputBuffer.rowBytes=CGImageGetBytesPerRow(img);
var pixelBuffer:UnsafeMutablePointer<Void> = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
var outputBuffer:vImage_Buffer = vImage_Buffer()
outputBuffer.data=pixelBuffer
outputBuffer.width=(vImagePixelCount)(CGImageGetWidth(img))
outputBuffer.height=(vImagePixelCount)(CGImageGetHeight(img))
outputBuffer.rowBytes=CGImageGetBytesPerRow(img);
// var error:vImage_Error? = vImage_Error()
var error:vImage_Error?
error = vImageBoxConvolve_ARGB8888(&inputBuffer, &outputBuffer, nil, 0, 0, blurRadix, blurRadix, nil, UInt32(kvImageEdgeExtend))
if (error != nil) {
println("image error\(error)")
}
var colorSpace = CGColorSpaceCreateDeviceRGB()
var w:Int=(Int)(outputBuffer.width)
var h:Int=(Int)(outputBuffer.height)
var ctx:CGContextRef = CGBitmapContextCreate(outputBuffer.data, w, h, 8, outputBuffer.rowBytes, colorSpace, CGImageGetBitmapInfo(image.CGImage))
var imageRef:CGImageRef = CGBitmapContextCreateImage (ctx)
var imagenew:UIImage = UIImage(CGImage:imageRef)!
free(pixelBuffer)
return imagenew;
}