странное поведение с частично прозрачным содержимым внутри UIScrollView - PullRequest
0 голосов
/ 14 января 2011

Реализация моей точки зрения ниже. scrollView - это iVar типа UIScrollView.

«Странное поведение» заключается в том, что при прокрутке вида фон постепенно меняется с оранжевого на зеленый. Кажется, что почти прозрачный фон надписи как-то накладывается на себя, пока вы не получите зеленый фон. Но я не понимаю, почему это так. Кто-нибудь может объяснить?

#import "ViewWithScrollView.h"

@implementation ViewWithScrollView

@synthesize scrollView;

-(void) layoutSubviews {
    scrollView.frame = self.bounds;
    CGSize size = self.frame.size;
    size.width*=2;
    size.height*=2;
    scrollView.contentSize = size;
    scrollView.backgroundColor = [UIColor orangeColor];
//  scrollView.clearsContextBeforeDrawing = YES;    //These two lines can be commented in or out; it makes no difference.
//  scrollView.opaque = NO;
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0,0,size.width, size.height)];
    label.textAlignment = UITextAlignmentCenter;
    label.font = [UIFont systemFontOfSize:200];
    label.text = @"Princess!";
    label.textColor = [UIColor blackColor];
    label.backgroundColor = [UIColor colorWithRed:0. green:1. blue:0. alpha:0.01];
//  label.opaque = NO;  // same for these two lines
//  label.clearsContextBeforeDrawing = YES;

    [scrollView addSubview: label];
}

- (id)initWithFrame: (CGRect) frame {
    self = [super initWithFrame:frame];
    if (self) {
//      self.opaque = NO;  //again, commenting these in or out makes no difference
//      self.clearsContextBeforeDrawing = YES;
        scrollView = [[UIScrollView alloc]init];
        [self addSubview:scrollView];
    }
    return self;
}
@end

Ответы [ 2 ]

1 голос
/ 14 января 2011

Каждый раз, когда вызывается -layoutSubviews, вы создаете новый ярлык. Это, вероятно, происходит чаще, чем вы думаете, и они накапливаются.

Если вы всегда будете иметь метку в своем представлении, сделайте ее переменной экземпляра. Переместите создание метки в метод -initWithFrame: вашего представления вместе с вашим прокруткой. Также добавьте это как подпредставление.

По сути, поместите материал, который вы хотите сделать один раз (создание объекта, иерархия) в -initWithFrame:, и материал, который вам может понадобиться делать повторно из-за изменений макета (размер, расположение и т. Д.) В -layoutSubviews.

0 голосов
/ 21 апреля 2012

я решил мою проблему с этим;

в моем подпредставлении viewDidload

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.view.backgroundColor = [UIColor clearColor];
    image.backgroundColor = [UIColor clearColor];
}
...