Кварцевый нестандартный рисунок и UIViews. Не видно кварцевый рисунок - PullRequest
0 голосов
/ 20 сентября 2010

Я рисую на UIview несколько других подпредставлений. Затем в методе DrawRect этого UIView я рисую кривую Безье.

К сожалению, кривая Безье никогда не появляется. Я проверил, что кривая Безье находится за фоном вида (когда я удаляю вид фона, я вижу его).

Как я могу объединить пользовательский рисунок с Кварцем и другими UISubviews?

UIViews представления хранятся в xib. Я загружаю XIB, а затем рисую кривую в методе Drawrect вида.

Это код реализации UIView, о котором я говорю:

#import "DandiGameView.h"
#import "SeedView.h"
#import "Defines.h"

@implementation DandiGameView

@synthesize flowerHeadPosition, blowVolume, seedArray, trunkTop;

- (void)awakeFromNib {
 [super awakeFromNib];
 //self.clearsContextBeforeDrawing = YES;
 [self animateTrunk:1 andWindVolume:1.0];
 self.seedArray = [NSMutableArray array];
 UIImageView *tmpImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TRUNKTOP.PNG"]];
 [tmpImageView setCenter:flowerHeadPosition];
 self.trunkTop = tmpImageView;
 [tmpImageView release];
 //[tmpImageView sett]
 [self addSubview:self.trunkTop];
 [tmpImageView release];
}

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder:decoder])
    {
  // Initialization code
  float pointX =  FLOWER_POSITION_HOR - FLOWER_TRUNK_WIDTH / 2.0;
  float topPointY =  self.bounds.size.height - FLOWER_POSITION_VER;
  flowerHeadPosition = CGPointMake(pointX, topPointY);
  s = CGPointMake(pointX, self.bounds.size.height);
  e = flowerHeadPosition;
  cp1 = CGPointMake(pointX + 10.0, self.bounds.size.height - FLOWER_LOWER_CONTROLPOINT);
  cp2 = CGPointMake(pointX - 10.0, self.bounds.size.height - FLOWER_UPPER_CONTROLPOINT);
    }
    return self;
}

- (void) animateTrunk:(double)time andWindVolume: (double) windVolume {
 randOne = sin(0.2 * time * windVolume) + sin(0.5 * time* windVolume);
 randTwo = sin(0.35 * time* windVolume) - sin(0.15 * time * windVolume);
 flowerHeadPosition.x = FLOWER_POSITION_HOR - FLOWER_TRUNK_WIDTH / 2.0 - randTwo * randOne * FLOWER_CURVITY_CONTROL;
 cp1.x = FLOWER_POSITION_HOR - FLOWER_TRUNK_WIDTH / 2.0 + 10 + randTwo * randOne * 2.0;
 [self.trunkTop setCenter:flowerHeadPosition];
 [self bringSubviewToFront:trunkTop];
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {
    // Drawing code
 CGContextRef c = UIGraphicsGetCurrentContext();

    // Drawing with a GREEN stroke color
 CGContextSetRGBStrokeColor(c, 141.0/255.0, 198.0/255.0, 63.0/255.0, 1.0);
 // Draw them with a FLOWER_TRUNK_WIDTH stroke width so they are a bit more visible.
 CGContextSetLineWidth(c, FLOWER_TRUNK_WIDTH);
 // Draw a bezier curve with end points s,e and control points cp1,cp2
 e = flowerHeadPosition;
 CGContextMoveToPoint(c, s.x, s.y);
 CGContextAddCurveToPoint(c, cp1.x, cp1.y, cp2.x, cp2.y, e.x, e.y);
 CGContextStrokePath(c);
}

-(void)onElementTouch:(id)sender {

}

- (void) onTimeTick:(id)sender {
 static float runningTime = 0.0;
 runningTime += ANIMATION_TIME_STEP;
 [self animateTrunk:runningTime andWindVolume:pow(blowVolume, 5.0)];
}


- (void)dealloc {
 [trunkTop release];
 [delegate release];
    [super dealloc];
}


@end

1 Ответ

0 голосов
/ 20 сентября 2010

Имеют ли для подвидов вида, в который вы рисуете, свойство opaque значение YES?Если это так (по умолчанию), и они полностью охватывают вид, в который вы рисуете, то я не ожидаю увидеть ваш рисунок.

РЕДАКТИРОВАТЬ с дополнительным предложением:

Еслидругие виды имеют opaque=NO, возможно, также установить их фоновый цвет, чтобы очистить?Если они созданы в Интерфейсном Разработчике, вы можете установить их цвет фона на «Очистить Цвет».Если они созданы в коде, вы можете сделать view.backgroundColor = [UIColor clearColor].

...