Как бы я мог установить расположение изображений по умолчанию для CGRect, и позволить только изображение, которое будет сброшено внутри другого CGRect - PullRequest
0 голосов
/ 30 марта 2012

Я работал над этим два дня, и мне не повезло.У меня есть небольшое мозаичное изображение, которое я могу перетащить в любое место на экране с помощью координат касания.Мой первый вопрос: как я могу установить координаты изображений мозаики так, чтобы они начинались внутри зеленого CGRect вместо экрана верхнего угла?Другими словами, я хочу сделать зеленый CGRect расположение изображения по умолчанию с влиянием на пользовательские координаты toch.Мой следующий вопрос: как я могу написать его там, где единственное другое место на экране, куда я могу перетащить изображение, находится внутри красного CGRect?И если более половины изображения находится внутри красного CGRect, как я могу привязать его к красному CGRect, если кто-то отпустит его?Если более половины изображения находится за пределами CGRect, я хочу анимировать его обратно в его расположение по умолчанию.Если вы собираетесь ответить, объясните, пожалуйста, ваш ответ подробно, потому что я новичок в цели-c.Вот снимок экрана моего графического интерфейса.

I phone GUI screenshot

Вот мой код:

DADViewController.h

#import <UIKit/UIKit.h>
#import "DADView.h"
@interface DADViewController : UIViewController
@property(nonatomic, weak)IBOutlet DADView *dadView;
@end

DADViewController.m

#import "DADViewController.h"
@implementation DADViewController
@synthesize dadView = _dadView;
-(void)setDadView:(DADView *)dadView
{
    _dadView = dadView;
    [self.dadView setNeedsDisplay];
}
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:touch.view];
    location.x -= 40;
    location.y -= 40;
    self.dadView.thePoint = location;
    [self.dadView setNeedsDisplay];

}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [self touchesBegan:touches withEvent:event];
}

DADView.h

@interface DADView : UIView
@property(nonatomic) CGPoint thePoint;
@end

DADView.m

#import "DADView.h"
@implementation DADView
@synthesize thePoint = _thePoint;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}
- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(ctx, 2.0);
    CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
    CGRect rectangle = CGRectMake(120, 70, 70, 70);
    CGContextAddRect(ctx, rectangle);
    CGContextStrokePath(ctx);

    CGContextSetLineWidth(ctx, 2.0);
    CGContextSetStrokeColorWithColor(ctx, [UIColor greenColor].CGColor);
    CGRect rectangle2 = CGRectMake(120, 290, 70, 70);
    CGContextAddRect(ctx, rectangle2);
    CGContextStrokePath(ctx);

    UIImage* pngWord = [UIImage imageNamed:@"wordbutton_01.png"];
    [pngWord drawAtPoint:self.thePoint];
}
@end

1 Ответ

1 голос
/ 30 марта 2012

Чтобы установить представление в начале:

CGRect viewFrame = view.frame;
viewFrame.origin = startingRect.origin;
view.frame = viewFrame;

view - это ваше изображение, а initialRect - это прямоугольник, с которого вы хотите, чтобы ваше изображение начиналось, и этот код в awakFromNib или в или когда вы устанавливаетеthe image

Чтобы проверить, находится ли изображение внутри рамки при перетаскивании:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    CGFloat middleX = CGRectGetMidX(imageView.frame);
    CGFloat middleY = CGRectGetMidY(imageView.frame);
    if(middleX > rectangle2.origin.x && middleX < CGRectGetMaxX(rectangle2) && middleY > rectangle.origin.y && middleY < CGRectGetMaxY(ractangle2)) {
   // if the imageView is inside of the box
   }
else imageView.frame = defaultFrame;

imageView - это изображение, которое перемещается, а прямоугольник 2 - это кадр, который требуется для imageView.в, в то время как рамка по умолчанию - это где рамка изображения должна быть установлена, если она не заканчивается в поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...