CALayer не рендеринг или рисование - PullRequest
1 голос
/ 11 ноября 2011

У меня есть подкласс UIButton внутри подкласса UITableViewCell. Кнопка загружена из кончика.

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

QuartzCore импортируется.

Код моего подкласса UIButton (всегда загружается с кончика):

-(void)awakeFromNib {
    [super awakeFromNib];
    self.clipsToBounds = NO;
    self.backgroundColor = [UIColor clearColor];
    self.opaque = NO;
    self.userInteractionEnabled = YES;
}

Код в контроллере табличного представления:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCustomCell *cell = (BLCustomCellCenter*)[tableView dequeueReusableCellWithIdentifier:@"customCellID"];
    if (cell == nil) {
        // ... cell is initialized
    }

    // configure the image for the button
    //
    // Note:  there is an outlet to the UIButton called 'customButton' 

    CALayer *imgLayer = [CALayer layer];
    imgLayer.bounds = CGRectMake(0, 0, cell.customButton.bounds.size.width, cell.customButton.bounds.size.height);
    imgLayer.position = CGPointMake(cell.customButton.bounds.size.width/2, cell.customButton.bounds.size.height/2);
     UIImage *img = [UIImage imageNamed:@"someImage"];
    imgLayer.contents = (id)[img CGImage];
    [cell.customButton.layer addSublayer:imgLayer];

    // ... configure subviews of 'customButton'

    return cell;
}

Любая помощь очень ценится, как всегда.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Разобрался, после часов отладки.Дело в том (что, возможно, я забыл упомянуть), что пользовательский UITableViewCell был загружен с пера.Подвид, который я хотел просмотреть, также был загружен из пера.Итак, это перо внутри пера.

За эта замечательная статья , переопределив awakeAfterUsingCoder: внутри класса подпредставления, добилась цели.При загрузке родительского пера супер * initUsingCoder: вызывается в подпредставлении, которое загружает только объект-заполнитель.

Этот объект-заполнитель вызывал у меня проблемы, когда я манипулировал заполнителем вместо фактического объекта, который я хотел.

Следовательно, вы должны загрузить и инициализировать объекты подпредставления из пера,и вы делаете это путем переопределения NSObject '* awakeAfterUsingCoder:.

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

Попробуйте добавить [imgLayer setNeedsDisplay]; после установки содержимого.

...