之前在360的App里看到一个有趣的东西,就是当应用进入后台后再查看后台程序的时候,程序的截图是一个自定义的图片,而不是App的截图,感觉还蛮有用的(可以做广告或者自定义)。其实要实现这个效果很简单,因为系统把截图存放在App的沙盒里面的,所以我们只需要在App进入后台以后将原来截图替换掉就可以了
直接看效果
关键代码如下:
var downscaledPath = NSHomeDirectory() +
"/Library" +
"/Caches" +
"/Snapshots" +
"/\(NSBundle.mainBundle().bundleIdentifier!)" + "/downscaled"
var existedImageName:String? {
let fileMgr = NSFileManager.defaultManager()
do
{
return try fileMgr
.contentsOfDirectoryAtPath(downscaledPath)
.filter {
return $0.hasSuffix("png")
}.first
} catch let e {
print(e)
return nil
}
}
var replaceImageData:NSData {
let path = NSBundle.mainBundle().pathForResource("notice.jpg", ofType: nil)!
return NSData(contentsOfFile: path)!
}
func replaceExistsedImage() {
guard let _ = existedImageName else {
return
}
replaceImageData.writeToFile(downscaledPath + "/\(existedImageName!)", atomically: true)
}
func applicationDidEnterBackground(application: UIApplication) {
delay(0.5) {
self.replaceExistsedImage()
}
}
downscaledPath
:系统存放App截图的目录
existedImageName
:系统存放具体的截图
replaceImageData
:需要替换系统截图的图片
当然这只是个原理Demo, 我们还需要针对不同的设备提供不同的图片,而且还要判断截图时候的设备横纵方向做一些其他操作