2012-03-22 2 views
0

, поэтому я пытаюсь нарисовать некоторые линии сетки, которые в ландшафте идут до самого низа, однако, когда я переключаюсь на пейзаж, график не следует, а линии сетки меньше.График не соответствует ориентации

я установить

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return YES; 
} 

Однако он по-прежнему не работает, вот мой код. Может ли кто-нибудь обнаружить проблему? это пользовательский файл представлений, контроллер просмотра по умолчанию отличается от кода выше, который возвращает да.

.h file 

#import <UIKit/UIKit.h> 
#define kGraphHeight 300 
#define kDefaultGraphWidth 900 
#define kOffsetX 10 
#define kStepX 50 
#define kGraphBottom 300 
#define kGraphTop 0 

@interface GraphView : UIView 

@end 

А вот реализация

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 0.6); 
    CGContextSetStrokeColorWithColor(context, [[UIColor lightGrayColor] CGColor]); 

    // How many lines? 
    int howMany = (kDefaultGraphWidth - kOffsetX)/kStepX; 
    // Here the lines go 
    for (int i = 0; i < howMany; i++) 
    { 
     CGContextMoveToPoint(context, kOffsetX + i * kStepX, kGraphTop); 
     CGContextAddLineToPoint(context, kOffsetX + i * kStepX, kGraphBottom); 
    } 

    CGContextStrokePath(context); 

} 

Любая помощь будет оценена

Кстати я после этого урока

http://buildmobile.com/creating-a-graph-with-quartz-2d/#fbid=YDPLqDHZ_9X

ответ

0

Вам нужно сделать три вещи:

  1. В Interface Builder выберите представление, содержащее график, и перетащите его, чтобы он заполнил экран.
  2. В интерфейсе Builder установите маски Autosizing на представление, чтобы он продолжал заполнять экран после вращения. Вы можете изменить имитируемые показатели внешнего вида, чтобы убедиться, что это происходит.
  3. Константы kGraphTop и kGraphBottom означают, что он составляет всего от 0 до 300 пикселей. Вы могли бы просто сделать kGraphBottom больше, но это было бы ненадежным. Вместо этого вы хотите найти размер границ обзора и заполнить их сверху вниз.

Вот как заполнить границы:

- (void) drawRect:(CGRect)rect 
{ 
    // Get the size of the view being drawn to. 
    CGRect bounds = [self bounds]; 

    CGContextSetLineWidth(context, 0.6); 
    CGContextSetStrokeColorWithColor(context, [[UIColor lightGrayColor] CGColor]); 

    // How many lines? 
    int howMany = (bounds.size.width - kOffsetX)/kStepX; 
    // Here the lines go 
    for (int i = 0; i < howMany; i++) 
    { 
     // Start at the very top of the bounds. 
     CGContextMoveToPoint(context, bounds.origin.x+kOffsetX + i * kStepX, bounds.origin.y); 
     // Draw to the bottom of the bounds. 
     CGContextAddLineToPoint(context, bounds.origin.x+kOffsetX + i * kStepX, bounds.origin.y+bounds.size.height); 
    } 

    CGContextStrokePath(context); 
} 
Смежные вопросы