Я новичок в разработке для iOS.
Я пытаюсь создать приложение Doodle, я не использую раскадровки. Мой код примерно такой:
У меня есть UIViewController
с именем VWDashboard .
VWDashboard добавляет UIView
в качестве подпредставления с именем Doodle .
Doodle * Предполагается, что подпредставление 1024 * - это экран, на котором будет рисоваться каракули, так как на Dashboard есть другие виды и прочее ... Dahsboard "откроет" этот Doodle просмотр (добавить как подпредставление).
Чтобы нарисовать каракули, мне нужно получить методы touchesBegan, touchesMoved, touchesEnded
, вызываемые на моем UIView, но я получаю его на моей VWDashboard . В VWDashboard у меня есть это:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[doodleDelegate touchBegan:touches withEvent:event];
NSLog(@"Dashboard: touchesBegan");
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[doodleDelegate touchMoved:touches withEvent:event];
NSLog(@"Dashboard: touchesMoved");
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[doodleDelegate touchEnded:touches withEvent:event];
NSLog(@"Dashboard: touchesEnded");
}
В моем UIView
эти методы объявлены (я думаю, что для переопределения), и у меня есть код для рисования каракуля (я сделал небольшую демонстрацию на UIViewController и работал).
Когда я касаюсь экрана, все эти журналы можно увидеть, но методы в подпредставлении не вызываются.
Я пытался создать делегат, который «слушает» методы на VWDashboard и передает данные в мой UIView
Doodle, чтобы каракули рисовались в соответствующем UIImageView
и т. Д., Но не работает:
VWDashboard.h
@class Doodle;
@protocol DoodleDelegate <NSObject>
- (void)touchBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchEnded:(NSSet *)touches withEvent:(UIEvent *)event;
@end
@interface VWDashboard : VWBase {
id <DoodleDelegate> delegate;
}
@property (retain, nonatomic) id <DoodleDelegate> delegate;
@end
Doodle.h
#import <UIKit/UIKit.h>
#import "VWDashboard.h"
NS_ASSUME_NONNULL_BEGIN
@interface Doodle : UIView <DoodleDelegate> {
// Drawing
CGPoint lastPoint;
CGFloat red;
CGFloat green;
CGFloat blue;
CGFloat brush;
CGFloat opacity;
BOOL mouseSwiped;
}
@end
NS_ASSUME_NONNULL_END
Doodle.m
#import "Doodle.h"
#import "SCLAlertView.h"
@implementation Doodle {
UIImageView *canvasSignature, *canvasDoodle;
}
- (id)initWithFrame:(CGRect)frame {
/// renderUI ....
return self;
}
-(void) renderUI...
- (void)touchBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// Drawing code
}
- (void)touchMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// Drawing code
}
- (void)touchEnded:(NSSet *)touches withEvent:(UIEvent *)event {
// Drawing code
}
@end
Вот так я устанавливаю делегата в VWDashboard :
Doodle *doodl = [[Doodle alloc] initWithFrame: _moduleLayoutActive.bounds];
[self setDoodleDelegate:doodl];
[_moduleLayoutActive addSubview: doodl];
Пожалуйста! Любая помощь, которую я действительно ценю, спасибо!