我的应用程序是用于在 iPhone/iPad 上查看书籍的电子阅读器。用户可以选择下载我们在设备上保存为 .epub 文件(压缩内容)的图书 - 这样可以在离线时查看图书。页面内容为html。
但是,某些资产(例如视频)不在此 .epub 内容中。当用户导航到这样的页面时,我必须检测不在 .ePub 中的外部资产并显示一个简单的占位符,其中包含文本“此内容在脱机时不可用”。
这些视频可以嵌入到 iFrame html 标签或对象标签中。
现在我们有一个继承自 NSURLProtocol 抽象类的类,我正在使用它来处理这个需求。我有这三种方法的实现:
+ (BOOL) canInitWithRequest:(NSURLRequest *)request
- (void)startLoading
- (void) sendResponse:(NSData *)data mimetype:(NSString *)mimetype url:(NSURL *)url
我现在的问题是我有一个简单的 .png 显示“此内容在离线时不可用”但它很难看,因为有时 iFrame 的区域小于图像。我如何缩放它以适应?还是有更好的方法?只要我可以显示该内容不可用的消息,它就不必是图像。我在 startLoading 方法中的当前代码:
- (void) startLoading
{
…
NSString *bundlePath = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] bundlePath],@"PxeReaderResources.bundle"];
NSString *pathToPlaceholder = [NSString stringWithFormat:@"%@/%@",bundlePath,@"OfflinePlaceholder.png"]; //my placeholder image
NSLog(@"Path to placeholder is: %@", pathToPlaceholder);
data = [[NSFileManager defaultManager] contentsAtPath:pathToPlaceholder];
…
[self sendResponse:data mimetype:@"application/octet-stream" url:self.request.URL];
}
- (void) sendResponse:(NSData *)data mimetype:(NSString *)mimetype url:(NSURL *)url
{
NSDictionary *headers = @{@"Content-Type" : mimetype, @"Access-Control-Allow-Origin" : @"*", @"Cache-control" : @"no-cache"};
NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:url statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:headers];
[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
[self.client URLProtocol:self didLoadData:data];
[self.client URLProtocolDidFinishLoading:self];
}
感谢您的任何建议。