在 UIImageView 上应用 CAGradient 层在上边缘和左边缘

Posted

技术标签:

【中文标题】在 UIImageView 上应用 CAGradient 层在上边缘和左边缘【英文标题】:apply CAGradient layer on UIImageView On Top edge and Left edge 【发布时间】:2014-01-03 11:03:02 【问题描述】:

这是我用来在 UIIimageView 上应用 CAGradient 层的代码。它在一个边缘上工作,但我无法在其他边缘上应用。 我使用两个 CAGradient 层来应用在 ImageView 的左侧和顶部来淡化它。但它只应用了 UIImageview 的一侧。

这是我的代码。

UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0,160,300)];
        imgView.image=[UIImage imageNamed:@"1.jpg"];
        [self.view addSubview:imgView];

        UIImageView *imgView1=[[UIImageView alloc] initWithFrame:CGRectMake(100,0,160,300)];
        imgView1.image=[UIImage imageNamed:@"2.jpg"];
        [self.view addSubview:imgView1];


        CAGradientLayer *l = [CAGradientLayer layer];
        l.frame =imgView1.bounds;
        l.colors =[NSArray arrayWithObjects:
                       ( id)[UIColor clearColor].CGColor,
                       ( id)[UIColor clearColor].CGColor,
                       ( id)[UIColor whiteColor].CGColor,
                       ( id)[UIColor whiteColor].CGColor,
                       nil];
        l.startPoint = CGPointZero; // top left corner
        l.endPoint = CGPointMake(50,1);
         imgView1.layer.mask =l;
        [self fadeIn:imgView1];


        CAGradientLayer *l2 = [CAGradientLayer layer];
        l2.frame =imgView1.bounds;
        l2.colors =[NSArray arrayWithObjects:
                       ( id)[UIColor clearColor].CGColor,
                       ( id)[UIColor clearColor].CGColor,
                       ( id)[UIColor whiteColor].CGColor,
                       ( id)[UIColor whiteColor].CGColor,
                       nil];
        l2.startPoint = CGPointZero; // top left corner
        l2.endPoint = CGPointMake(1,50);
         imgView1.layer.mask =l2;
        [self fadeIn:imgView1];


    static NSArray *locations(float a, float b, float c, float d, float e, float f, float g)
    
        return [NSArray arrayWithObjects:
                [NSNumber numberWithFloat:a],
                [NSNumber numberWithFloat:b],
                [NSNumber numberWithFloat:c],
                [NSNumber numberWithFloat:d],
                [NSNumber numberWithFloat:e],
                [NSNumber numberWithFloat:f],
                [NSNumber numberWithFloat:g],
                nil];
    
    - (IBAction)fadeIn:(UIImageView*)img
    
        [CATransaction begin];
        [CATransaction setValue:[NSNumber numberWithDouble:1.0] forKey:kCATransactionAnimationDuration];
        ((CAGradientLayer *)img.layer.mask).locations = locations(-1.5,-1.0,-0.5,0,0.5,1,1.5);
        [CATransaction commit];
    

【问题讨论】:

【参考方案1】:

试试这个。它可能对你有帮助。

CAGradientLayer *l = [CAGradientLayer layer];
l.doubleSided = YES;

【讨论】:

以上是关于在 UIImageView 上应用 CAGradient 层在上边缘和左边缘的主要内容,如果未能解决你的问题,请参考以下文章

如何从应用程序本地检索图像并使用 Objective-C 在 UIImageView 上显示

UIImageView在设备上的启动屏幕中丢失图像

如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?

MonoTouch,在 UIImageView 上绘制裁剪区域层

在 UIImageView 上设置角半径不起作用

如何在点击手势上为 UIImageView 设置动画?