使用UIActivityController后,Modal UIViewController显示为黑色

时间:2014-06-04 20:12:05

标签: ios cocoa-touch uiactivityviewcontroller

在底部阅读我的编辑
在我的应用中,我有一个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方法。为什么?那很疯狂。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

找到解决方案:UIActivityViewController在UIColor上定义一个私有的randomColor方法,它覆盖了我的。