1

ペイントブラシで描いているのと同じように、uiviewでランダムなデザインを描きたいと思います。ユーザーが画面に触れて描画を開始したいです。彼がそれを描くことができるよりも、彼がそれにOKを書きたい場合. 彼がアヒルやボールを作りたい場合は、それを作ることができます. 助けてください。

4

2 に答える 2

0

UIViewを上記のサブクラスにする必要があります。また、コントローラーのclass.mファイルで、これら2つのメソッドを追加して呼び出す必要があります。これがうまくいくことを願っています。

-(IBAction)clear {

[self.view cancelDrawing];

}

-(IBAction)saveDrawing {

UIGraphicsBeginImageContext(self.view.bounds.size);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *finishedPic = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(finishedPic, self, @selector(exitProg:didFinishSavingWithError:contextInfo:), nil);

}

于 2012-05-24T10:00:18.383 に答える
0

これを試して。これで、私が持っているself.view.frameところならどこでも使用する必要がありmyPic.Frameます。

ヘッダー ファイル内:

#import <Foundation/Foundation.h>

@interface DrawView : UIView {

    UIImage *myPic;

    NSMutableArray *myDrawing;

}

-(void)drawPic:(UIImage *)thisPic;

-(void)cancelDrawing;

@end

および実装ファイルで:

#import "DrawView.h"

@implementation DrawView

-(void)drawPic:(UIImage *)thisPic {

    myPic = thisPic;

    [myPic retain];

    [self setNeedsDisplay];

}

- (void)drawRect:(CGRect)rect {

    float newHeight;

    float newWidth;

    if (!myDrawing) {

        myDrawing = [[NSMutableArray alloc] initWithCapacity:0];

    }

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    if (myPic != NULL) {

        float ratio = myPic.size.height/460;

        if (myPic.size.width/320 > ratio) {

            ratio = myPic.size.width/320;

        }

        newHeight = myPic.size.height/ratio;

        newWidth = myPic.size.width/ratio;

        [myPic drawInRect:CGRectMake(0,0,newWidth,newHeight)];

    }

    if ([myDrawing count] > 0) {

        CGContextSetLineWidth(ctx, 5);

        for (int i = 0 ; i < [myDrawing count] ; i++) {

            NSArray *thisArray = [myDrawing objectAtIndex:i];

            if ([thisArray count] > 2) {

                float thisX = [[thisArray objectAtIndex:0] floatValue];

                float thisY = [[thisArray objectAtIndex:1] floatValue];

                CGContextBeginPath(ctx);

                CGContextMoveToPoint(ctx, thisX, thisY);

                for (int j = 2; j < [thisArray count] ; j+=2) {

                    thisX = [[thisArray objectAtIndex:j] floatValue];

                    thisY = [[thisArray objectAtIndex:j+1] floatValue];

                    CGContextAddLineToPoint(ctx, thisX,thisY);

                }

                CGContextStrokePath(ctx);

            }

        }

    }

}

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    [myDrawing addObject:[[NSMutableArray alloc] initWithCapacity:4]];

    CGPoint curPoint = [[touches anyObject] locationInView:self];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]];

}

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    CGPoint curPoint = [[touches anyObject] locationInView:self];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]];

    [self setNeedsDisplay];

}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    CGPoint curPoint = [[touches anyObject] locationInView:self];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.x]];

    [[myDrawing lastObject] addObject:[NSNumber numberWithFloat:curPoint.y]];

    [self setNeedsDisplay];

}

-(void)cancelDrawing {

    [myDrawing removeAllObjects];

    [self setNeedsDisplay];

}

- (void)dealloc {

    [super dealloc];

    [myPic release];

    [myDrawing release];

}

@end
于 2012-05-22T04:33:58.163 に答える