IOS图像9之自定义侧划栏(类似新浪微博Swift)

本文详细介绍了如何在iOS应用中实现滑动视图的弹出动画,并结合整体模糊效果,提供了具体的Swift代码实现,包括隐藏与显示过程中的动画处理与界面变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果:


整个策划栏的实现,其实就是将一个包含tableviewview添加到了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;

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值