objective-c gradient uicollectionview

objective c - Objetivo C-Gradiente desvanecido en los lados izquierdo y derecho de UICollectionView



objective-c (2)

Tengo un UICollectionView de desplazamiento horizontal dentro de la vista principal de un controlador de vista como ese (Gray es UIView, Wood es UICollectionView):

Quiero agregar degradados desvanecidos fijos en los extremos izquierdo y derecho de este UICollectionView para que las volutas parezcan desaparecer a medida que el usuario se desplaza. ¿Cómo voy a hacer esto? ¿Implica algún uso de CAGradientLayer? ¡Estaría agradecido por cualquier ayuda que pueda darme!


De hecho, me las arreglé para resolver esto usando una capa de máscara gracias a este tutorial en Cocoanetics . Esto es lo que hice:

@interface ScalesViewController : UIViewController { CAGradientLayer *maskLayer; } @end

Luego en el .m, coloqué en lo siguiente:

- (void)viewDidAppear:(BOOL)animated { [super viewWillAppear: animated]; if (!maskLayer) { maskLayer = [CAGradientLayer layer]; CGColorRef outerColor = [[UIColor colorWithWhite:0.0 alpha:1.0] CGColor]; CGColorRef innerColor = [[UIColor colorWithWhite:0.0 alpha:0.0] CGColor]; 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.125], [NSNumber numberWithFloat:0.875], [NSNumber numberWithFloat:1.0], nil]; [maskLayer setStartPoint:CGPointMake(0, 0.5)]; [maskLayer setEndPoint:CGPointMake(1, 0.5)]; maskLayer.bounds = self.mainCollectionView.bounds; maskLayer.anchorPoint = CGPointZero; [self.mainCollectionView.layer insertSublayer: maskLayer atIndex: 0]; } }

Esto crea un bonito efecto "fade to black" en ambos lados de mi vista de colección. Se pueden agregar más colores a las ubicaciones y propiedades de color para refinar la mezcla de gradiente. Los puntos de inicio / final determinan la dirección y la ubicación del degradado.


Intente agregar dos capas de CAGradientLayer en la subcapa de vista de colección:

#import <QuartzCore/QuartzCore.h> CAGradientLayer *leftShadow = [CAGradientLayer layer]; leftShadow.frame = CGRectMake(0, 0, 100, self.collectionView.frame.size.height); leftShadow.startPoint = CGPointMake(0, 0.5); leftShadow.endPoint = CGPointMake(1.0, 0.5); leftShadow.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithWhite:0.0 alpha:0.4f] CGColor], (id)[[UIColor clearColor] CGColor], nil]; [self.collectionView.layer addSublayer:leftShadow]; CAGradientLayer *rightShadow = [CAGradientLayer layer]; rightShadow.frame = CGRectMake(CGRectGetWidth(self.collectionView.frame)-100.0, 0, 100, self.collectionView.frame.size.height); rightShadow.startPoint = CGPointMake(1.0, 0.5); rightShadow.endPoint = CGPointMake(0, 0.5); rightShadow.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithWhite:0.0 alpha:0.4f] CGColor], (id)[[UIColor clearColor] CGColor], nil]; [self.collectionView.layer addSublayer:rightShadow];