Слой маски UIImageView белый - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь создать круглый угол в UIImageView только в одном указанном углу для верхней строки в UITableView и нижней строки.

В cellForRowAtIndexPath у меня есть:

NSURL *url = [[NSURL alloc] initWithString:user.image];
[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"noImageWoman.jpg"]];
[url release];

if (indexPath.row == 0)
    cell.imageView.layer.mask = [Helper roundedCornerOnImage:cell.imageView onCorner:UIRectCornerTopLeft];
else if (indexPath.row == self.arrayIntrestedPeople.count - 1)
    cell.imageView.layer.mask = [Helper roundedCornerOnImage:cell.imageView onCorner:UIRectCornerBottomLeft];

Мой метод roundedCornerOnImage:

+ (CAShapeLayer *) roundedCornerOnImage: (UIImageView *)imageView onCorner: (UIRectCorner)rectCorner
{
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds 
                                                   byRoundingCorners:rectCorner
                                                         cornerRadii:CGSizeMake(10.0, 10.0)];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.fillColor = [[UIColor whiteColor] CGColor];
    maskLayer.backgroundColor = [[UIColor clearColor] CGColor];
    maskLayer.frame = imageView.bounds;
    maskLayer.path = maskPath.CGPath;


    //Don't add masks to layers already in the hierarchy!
    UIView *superview = [imageView superview];
    [imageView removeFromSuperview];
    imageView.layer.mask = maskLayer;

    [superview addSubview:imageView];


    return maskLayer;
}

Теперь, когда загружен UITableView, все изображения загружаются идеально, но не верхнее и не нижнее изображение, к которому я применил маску слоя.Это белый , изображение полностью белый .

Когда я прокручиваю UITableView, чтобы ячейки можно было воссоздать, изображения включали верхнее и нижнее изображение UITableView показано .

Почему это?

Мой код дыры в cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableVieww cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    GlobalProperties *gp = [GlobalProperties sharedGlobalProperties];
    User *user = [self.arrayIntrestedPeople objectAtIndex:indexPath.row];

    SizeableRoundedTableViewImage *cell = (SizeableRoundedTableViewImage *)[tableVieww dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
    {
        cell = [[[SizeableRoundedTableViewImage alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    NSURL *url = [[NSURL alloc] initWithString:user.image];
    [cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"noImageWoman.jpg"]];
    [url release];

    if (indexPath.row == 0)
        cell.imageView.layer.mask = [Helper roundedCornerOnImage:cell.imageView onCorner:UIRectCornerTopLeft];
    else if (indexPath.row == self.arrayIntrestedPeople.count - 1)
        cell.imageView.layer.mask = [Helper roundedCornerOnImage:cell.imageView onCorner:UIRectCornerBottomLeft];


        cell.textLabel.text                 = user.username;



    return cell;
}

1 Ответ

0 голосов
/ 26 ноября 2011

Я не уверен, что это реальное решение, но похоже, что вы присваиваете свойство маски дважды. Вы устанавливаете его в пределах -roundedCornerOnImage:onCorner:, но это также возвращает маску, и вы устанавливаете его снова с возвращаемым значением. Это могут быть «неопределенные результаты», упомянутые в документации.

Мое предложение было бы избавиться от cell.imageView.layer.mask = битов каждого вызова.

В качестве вторичного примечания, может быть целесообразно отслеживать индекс UIImageView перед тем, как снимать его и вставлять на место, а не ставить поверх всего. На всякий случай.

...