CGGradient не виден (не используется interface builder) и UIButtons не могут быть запущены

#xcode #uiview #uiviewcontroller #uibutton

#xcode #uiview #uiviewcontroller #uibutton

Вопрос:

Я создал представление, содержащее CGGradient:

 // Bar ContextRef
CGRect bar = CGRectMake(0, screenHeight-staffAlignment, screenWidth, barWidth);
CGContextRef barContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(barContext);
CGContextClipToRect(barContext,bar);    

// Bar GradientRef
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat components[16] = { 1.0,1.0,1.0,0.0, 0.0,0.0,0.0,1.0, 0.0,0.0,0.0,1.0, 1.0,1.0,1.0,0.0}; 
CGFloat locations[4] = {0.95,0.85,0.15,0.05};
size_t count = 4;
CGGradientRef gradientRef = CGGradientCreateWithColorComponents(colorSpace, components, locations, count);

// Draw Bar
CGPoint startPoint = {0.0,0.0};
CGPoint endPoint = {screenWidth,0.0};
CGContextDrawLinearGradient(barContext, gradientRef, startPoint, endPoint, 0);
CGContextRestoreGState(barContext);     
  

Этот код вызывается в методе drawRect пользовательского интерфейса. Затем я использую UIViewController для доступа к созданному представлению.

 - (void)loadView {

MainPageView *mpView = [[MainPageView alloc] initWithFrame:[window bounds]];
[self setView:mpView];
[mpView release];
  

}

и отображаются на экране через AppDelegate:

 mpViewController = [[MainPageViewController alloc] init];   
[window addSubview:[mpViewController view]];

[window makeKeyAndVisible];
  

UIView содержит больше объектов, таких как UIButtons, которые видны. Я предполагаю, потому что они добавлены в качестве подвида. Но я не могу понять, как добавить CGGradient в качестве подвида? Это обязательно должно быть? Есть ли другая причина, по которой CGGradient не отображается?

Я также не понимаю функциональность UIButtons. Я предполагаю, что это из-за того, где я добавил UIButtons в представление. Нужно ли добавлять кнопки в UIViewController или AppDelegate, чтобы они имели функциональность. Извините, что задаю, казалось бы, простые вопросы, но я пытаюсь выполнить программирование без Interface Builder, а материалов по этому вопросу мало. Если бы кто-нибудь мог указать мне правильное направление по обеим этим проблемам, я был бы очень признателен.

Спасибо!

Ответ №1:

Функциональность кнопок была потеряна, потому что рамка была слишком большой, но кнопки все еще были видны, потому что фон был четким