ios - 带有 uiwebview swift 的 Gif

标签 ios swift webview uiwebview gif

我制作了一个 UIWebView 来显示 gif,我有 2 个按钮登录和注册。

首先,当我运行它时,我的 ram 使用 270mb 然后如果我点击一个按钮转到另一个 viewcontroller(270mb 停留)然后如果我返回它就像它正在加载另一个 gif 和 ram上升到 430mb

我已经在点击按钮时测试了 webview.stoploading()

 override func viewDidLoad() {
    super.viewDidLoad()
let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")
    let gif = NSData(contentsOfFile: filePath!)
    webview.loadData(gif!, MIMEType: "image/gif", textEncodingName: String(), baseURL: NSURL())
    webview.userInteractionEnabled = false; }



    @IBAction func login(sender: AnyObject) {

    webview.stopLoading()
}

最佳答案

尝试使用 cache policy: 加载您的内容

enum NSURLRequestCachePolicy : UInt {
    case UseProtocolCachePolicy
    case ReloadIgnoringLocalCacheData
    case ReloadIgnoringLocalAndRemoteCacheData
    static var ReloadIgnoringCacheData: NSURLRequestCachePolicy { get }
    case ReturnCacheDataElseLoad
    case ReturnCacheDataDontLoad
    case ReloadRevalidatingCacheData }

所以你的代码可以是:

let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")
var requestURL = NSURL(string:filePath!);
var request = NSMutableURLRequest(URL: requestURL!,
            cachePolicy: .ReturnCacheDataElseLoad,
            timeoutInterval: 15.0)

webview.loadRequest(request)

你也可以处理 NSURLCache 内存:

override func viewDidLoad() {
    super.viewDidLoad()

    let cacheSizeMemory = 8*1024*1024; // 8MB
    let cacheSizeDisk = 32*1024*1024; // 32MB

    let sharedCache = NSURLCache.init(
        memoryCapacity:cacheSizeMemory,
        diskCapacity:cacheSizeDisk,
        diskPath: "nsurlcache"
    )

    NSURLCache.setSharedURLCache(sharedCache)
}

override func didReceiveMemoryWarning() {
    print("Received memory warning")

    NSURLCache.sharedURLCache().removeAllCachedResponses()

    super.didReceiveMemoryWarning()
}

您可以对您的项目做的另一件事是使用如下代码缓存您的对象:

let cache = NSCache()
let myGiantObject: GiantObjectClass

if let cachedVersion = cache.objectForKey("GiantObjectClassCached") as? GiantObjectClass {
    // use the cached version
    myGiantObject = cachedVersion
} else {
    // create it from the original constructors then store in the cache
    myGiantObject = GiantObjectClass()
    cache.setObject(myObject, forKey: "GiantObjectClassCached")
}

关于ios - 带有 uiwebview swift 的 Gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269981/

相关文章:

Android WebView 不渲染 emoji U+1F642, U+1F917

ios - 从 UIbutton 读取数字

ios - 回复 : Publishing your Iphone app to Cydia?

android - 如何在 React Native 中创建自定义底部标签栏?

ios - 无法在属性初始值设定项中使用实例成员 'dateType';属性初始值设定项在 'self' 可用之前运行

iphone - UIWebView 加载崩溃 [__NSCFDictionary _isChargeEnabled]

ios - UICollectionViewCell 中的 UICollectionView (Swift)

ios - 将字符串属性添加到 Swift 中的 UIButton

ios - 比较一个结构的两个值并在 UITableView swift 4.0 中获取额外的单元格

Android 视频 WebView 全屏不工作 - onShowCustomView() 未调用