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];
}