在底部阅读我的编辑
在我的应用中,我有一个UIViewController
经常会出现一个模态UIViewController
。
这没有问题
-(void)flash
{
[self performSegueWithIdentifier:SEGUE_IDENTIFIER sender:self];
}
-(void)stopFlash
{
[self dismissViewControllerAnimated:YES completion:nil]
}
然而,当用户点击分享按钮时,取消分享对话框(只是取消或其他),并且应再次显示第一个模态UIViewController
,它只显示黑屏。
但是实例化了正确的模态UIViewController
,我可以在NSLogs
中看到它。点击分享按钮时,我使用以下操作:
- (IBAction)share:(id)sender
{
self.shareButton.hidden = YES;
[self.buttonActivity startAnimating];
dispatch_queue_t queue = dispatch_queue_create("background", NULL);
dispatch_async(queue, ^{
NSURL *url = APP_URL;
NSString *message = SHARE_MESSAGE;
NSArray *activities = [NSArray arrayWithObjects:message, url, nil];
UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:activities applicationActivities:nil];
activity.excludedActivityTypes = @[UIActivityTypeCopyToPasteboard, UIActivityTypeAddToReadingList];
};
self.shareController = activity;
dispatch_async(dispatch_get_main_queue(), ^{
[self.buttonActivity stopAnimating];
self.shareButton.hidden = NO;
[self presentViewController:self.shareController animated:YES completion:nil];
});
});
}
修改:
经过一些研究后我发现,问题出在UIColor
类别,但我还是无法修复。我在UIColor上有一个类别random
,有一个方法:
+(UIColor *)randomColor
{
CGFloat hue = ( arc4random() % 256 / 256.0 );
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;
UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
NSLog(@"color: %@", color);
return color;
}
此方法通常只返回一个随机颜色,在UIView
上设置为背景颜色。
出于某种原因,在我第一次打开UIActivityViewController``randomColor
的情况下,只返回nil。事实上,方法中的NSLog
甚至没有被执行,因此甚至不会调用randomColor方法。为什么?那很疯狂。
感谢您的帮助。
答案 0 :(得分:0)
找到解决方案:UIActivityViewController在UIColor上定义一个私有的randomColor方法,它覆盖了我的。