Как добавить тень для изображения? - PullRequest
0 голосов
/ 29 июля 2011

Я занимаюсь разработкой приложения, в котором у меня есть imageView для добавления изображения к нему, используя свойство image из imageView.but, прежде чем добавить изображение в imageView, я хотел добавить эффект тени на правой сторонеизображения.я нашел много ответов в переполнении стека, где меня попросили вызвать код в методе drawInRect, что можно сделать, когда я рисую изображение в imageView. Но я добавляю изображение, чтобы придать ему богатый вид, и мои изображения имеютлучшее качество.

Может кто-нибудь предложить мне подход.

конечное изображение, которое я хотел, выглядит как this

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier=@"identifier";

    [[ListDataSource sharedDataSource] loadFiles];
    ShelfCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell==nil) {
        cell=[[[ShelfCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier] autorelease];
    }
    cell.backgroundColor=[UIColor greenColor];
            if (indexPath.row%2==0) {

                cell.imageView1.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+0].titleImage;
                cell.imageView2.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+1].titleImage;
                cell.imageView3.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+2].titleImage;
                cell.imageView4.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+3].titleImage;
                cell.imageView5.image=nil;
            }else {
                cell.rackImage.frame=CGRectMake(128, bookHeight-5, 570, 60);
                cell.imageView1.image=nil;
                cell.imageView2.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+0].titleImage;
                cell.imageView3.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+1].titleImage;
                cell.imageView4.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+2].titleImage;
                cell.imageView5.image=[[ListDataSource sharedDataSource] dataAtIndex:(indexPath.row*4)+3].titleImage;
            }
    return cell;
}


**ShelfCell.m**

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {



        imageView1=[[UIImageView alloc] init];
        imageView1.frame=CGRectMake(10, 15, 110, 150);
        imageView1.layer.masksToBounds=NO;
        imageView1.layer.shadowRadius=5;
        imageView1.layer.shadowOpacity=0.5;
        imageView1.layer.shadowPath=[UIBezierPath bezierPathWithRect:imageView1.frame];
        imageView1.layer.shadowColor = [[UIColor blackColor] CGColor];
        imageView1.layer.shadowOffset = CGSizeMake(5,5);

        [self.contentView addSubview:imageView1];

        imageView2=[[UIImageView alloc] init];
        imageView2.frame=CGRectMake(CGRectGetMaxX(imageView1.frame)+30, 15, 110, 150);

        [self.contentView addSubview:imageView2];


        imageView3=[[UIImageView alloc] init];
        imageView3.frame=CGRectMake(CGRectGetMaxX(imageView2.frame)+30, 15, 110, 150);

        [self.contentView addSubview:imageView3];

        imageView4=[[UIImageView alloc] init];
        imageView4.frame=CGRectMake(CGRectGetMaxX(imageView3.frame)+30, 15, 110, 150);
        [self.contentView addSubview:imageView4];


        imageView5=[[UIImageView alloc] init];
        imageView5.frame=CGRectMake(CGRectGetMaxX(imageView4.frame)+30, 15, 110, 150);
        [self.contentView addSubview:imageView5];

    }
    return self;

}


**ListDataSource**

-(id)dataAtIndex:(NSUInteger)index{

    if (index>=[arrayOfDataDirectories count]) {
        return nil;
    }
    InfoDataSource *info = [[InfoDataSource alloc] init];
    [info loadDirectoryAtPath:[arrayOfDataDirectories objectAtIndex:index]];
    [info autorelease];
    return info;
}

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Сначала создайте ссылку на платформу QuartzCore и добавьте #import <QuartzCore/QuartzCore.h> в начало заголовочного файла.

Затем, предположив, что UIImageView называется yourImageView (, это может быть выход илилокально созданное представление ) вы можете поместить следующее в ваш viewDidLoad метод ...

yourImageView.layer.masksToBounds = NO;
yourImageView.layer.shadowOffset = CGSizeMake(5, 0);
yourImageView.layer.shadowRadius = 5;
yourImageView.layer.shadowOpacity = 0.5;
yourImageView.layer.shadowPath = [UIBezierPath bezierPathWithRect:yourImageView.bounds].CGPath;

Вы не должны пытаться переопределить метод drawRect: подкласса UIImageView какэто никогда не называется.Цитируется из документов Apple ...

Особые замечания

Класс UIImageView оптимизирован для отображения своих изображений на дисплее.UIImageView не будет вызывать drawRect: для подкласса.Если вашему подклассу требуется пользовательский код для рисования, рекомендуется использовать UIView в качестве базового класса.

1 голос
/ 29 июля 2011

Вы можете попробовать добавить тень к слою вида изображения следующим образом

imageView.layer.shadowColor = [[UIColor blackColor] CGColor];
imageView.layer.shadowOffset = CGSizeMake(5, 5); // Choose the offset you would like

Доступно больше свойств тени.Взгляните здесь .

Кроме того, в вашем заголовочном файле вам потребуется #import <QuartzCore/QuartzCore.h> и связать библиотеку QuartzCore с вашим проектом.Дайте мне знать, если это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...