直到今天,我使用CaptiveNetwork接口显示当前连接的Wifi的名称.iOS 9 Prerelease参考已经说过,CaptiveNetwork方法现在被删除了,但它们仍然在开始时工作.
有了最新版本,Apple似乎已经阻止了这个电话(可能是出于隐私问题?).
有没有其他方法来获得当前Wifi的名称?
这就是我今天获得SSID的方式,但你现在只获得nil:
#import <SystemConfiguration/CaptiveNetwork.h>
NSString *wifiName = nil;
NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *name in interFaceNames) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name);
if (info[@"SSID"]) {
wifiName = info[@"SSID"];
}
}
Run Code Online (Sandbox Code Playgroud) 文档说:
PHImageResultIsInCloudKey:一个布尔值,指示照片资产数据是存储在本地设备上还是必须从iCloud下载.(NSNumber)如果是,则不提供图像,因为必须从iCloud下载资产数据.要下载数据,请提交另一个请求,并为networkAccessAllowed选项指定YES.
但是当资产存储在iCloud照片库中时,此键始终为YES,即使已将其完全下载到设备中(在我的应用程序中下载,也在照片应用程序中打开).
如果图像不可用,我想让用户可以下载它(但不要自动执行,至少在没有Wifi的情况下不这样做).
那么如何确定图像是否需要下载?
更奇怪的是:当我的结果块
requestImageForAsset:targetSize:contentMode:options:resultHandler:
被调用需要下载的图像时,我会在传递较小且降级的版本之后使用requestedImage == nil进行最后一次调用.
在这种情况下降级为NO,即使我没有图像,仍然必须从iCloud下载图像,因为到目前为止,只有照片应用程序中的一个小缩略图在本地可用.
我在具有不同iOS 8版本(8.1.x,8.2 beta,8.3 beta)的iPhone和iPad上进行了测试,行为总是相同的.
在Photos应用程序中打开图像后,结果处理程序的最后一次调用具有完整大小的图像,但PHImageResultIsInCloudKey仍为YES.
这是我如何请求图像的一些代码:
PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
options.networkAccessAllowed = NO;
[self.imageManager requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *requestedImage, NSDictionary *info) {
// Checking for requestedImage and the info keys here
// When a full sized image was loaded, the result of PHImageResultIsInCloudKey is still YES
// When a full sized image couldn't be loaded cause it's in the cloud, isDegraded is NO and …Run Code Online (Sandbox Code Playgroud) 我有一个UIScrollView的子类,应该在顶部/底部淡出.(从opaque到clearColor,就像DetailView底部的Notes.app一样.)
所以我添加了一个UIGradientLayer作为scrollview.layer.mask,它似乎工作正常,直到我第一次滚动:
CAGradientLayer *mask = [CAGradientLayer layer];
mask.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.1],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:1.0],
nil];
mask.colors = [NSArray arrayWithObjects:
(__bridge id)[UIColor clearColor].CGColor,
(__bridge id)[UIColor whiteColor].CGColor,
(__bridge id)[UIColor whiteColor].CGColor,
(__bridge id)[UIColor clearColor].CGColor,
nil];
mask.frame = self.scrollview.bounds;
// vertical direction
mask.startPoint = CGPointMake(0, 0);
mask.endPoint = CGPointMake(0, 1);
self.scrollview.layer.mask = mask;
Run Code Online (Sandbox Code Playgroud)
但是当我滚动时,屏幕会滚动内容而不是粘在屏幕位置上,以便很好地淡出内容.
我通过在scrollviews layoutSubviews中重新定位掩码来解决这个问题:
-(void)layoutSubviews {
[super layoutSubviews];
CGRect layerMaskFrame = self.layer.mask.frame;
layerMaskFrame.origin = [self convertPoint:self.bounds.origin toView:self];
self.layer.mask.frame = layerMaskFrame;
}
Run Code Online (Sandbox Code Playgroud)
但是当我滚动时,现在面具的移动有点延迟了.看起来掩码的帧设置有延迟和动画.
两者,面具的滚动和移动都是平滑的,所以我不认为这是一个太慢的硬件问题.
但那怎么可能呢?不应该从动画中调用layoutSubviews,我立即在那里设置新框架......