1

scrollView の両端にフェードグラデーションを追加しようとしていますが、これはシミュレーターではうまく機能しますが、デバイスで実行すると、アクセスエラーが発生しました。

このリンクから取得した scrollView にフェードグラデーションを追加するコードを次に示します。13行目の.mファイルでは、エラーが発生します

.h ファイル

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface ViewController : UIViewController
{
    CAGradientLayer *maskLayer;
}

.m ファイル

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!maskLayer)
    {
        maskLayer = [CAGradientLayer layer];

        CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:0.5].CGColor;
        CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor;

       //here it gives bad access error
        maskLayer.colors = [NSArray arrayWithObjects:(__bridge id)(outerColor),(__bridge id)(innerColor),(__bridge id)(innerColor), (__bridge id)(outerColor), nil];


        maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],[NSNumber numberWithFloat:0.05],[NSNumber numberWithFloat:0.95],[NSNumber numberWithFloat:1.0], nil];

        maskLayer.bounds = CGRectMake(0, 0,scrollView.frame.size.width,scrollView.frame.size.height);

           maskLayer.frame = CGRectMake(0, scrollView.frame.origin.y,scrollView.frame.size.width,scrollView.frame.size.height);

        [self.view.layer addSublayer:maskLayer];
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)ascrollView
{
    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    maskLayer.position = CGPointMake(0, ascrollView.contentOffset.y);
    [CATransaction commit];
}
4

0 に答える 0