UIV no ve los toques cuando se llama

Hay varios otros problemas para esto, pero ninguna de las soluciones parece estar funcionando para mí. Soy muy nuevo en iOS, actualmente estoy trabajando en un problema del libro de progtwigción de iOS de Big Nerd Ranch.

La mayoría de las SO que encontré dijeron que el problema terminaba siendo userInteractionEnabled = YES faltaba. O el background de la vista se configuró en transparent . Pero eliminar el background transparente y configurar userInteractionEnabled = YES no userInteractionEnabled = YES la activación del evento. ¿Alguna idea de lo que me estoy perdiendo?

AppDelegate.m:

 #import "AppDelegate.h" #import "BNRHypnosisView.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; CGRect firstFrame = self.window.bounds; BNRHypnosisView *firstView = [[BNRHypnosisView alloc] initWithFrame:firstFrame]; firstView.userInteractionEnabled = YES; ViewController *controller = [[ViewController alloc] init]; [self.window setRootViewController:controller]; [self.window addSubview:firstView]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; } 

BNRHypnosisView.m:

 #import "BNRHypnosisView.h" @interface BNRHypnosisView() @property (strong, nonatomic) UIColor *circleColor; @end @implementation BNRHypnosisView -(void)drawRect:(CGRect)rect { CGRect bounds = self.bounds; CGPoint center; center.x = bounds.origin.x + bounds.size.width / 2.0; center.y = bounds.origin.y + bounds.size.height / 2.0; float maxRadius = hypot(bounds.size.width, bounds.size.height) / 2.0; UIBezierPath *path = [[UIBezierPath alloc] init]; for (float currentRadius = maxRadius; currentRadius > 0; currentRadius -=20) { [path moveToPoint:CGPointMake(center.x + currentRadius, center.y)]; [path addArcWithCenter:center radius:currentRadius startAngle:0.0 endAngle:M_PI * 2.0 clockwise:YES]; } path.lineWidth = 10; [self.circleColor setStroke]; [path stroke]; } -(instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor clearColor]; self.circleColor = [UIColor lightGrayColor]; } return self; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"%@ was touched", self); float networking = (arc4random() % 100) / 100.0; float green = (arc4random() % 100) / 100.0; float blue = (arc4random() % 100) / 100.0; UIColor *randomColor = [UIColor colorWithRed:networking green:green blue:blue alpha:1.0]; self.circleColor = randomColor; } 

Captura de pantalla de la aplicación: introduzca la descripción de la imagen aquí

Captura de pantalla del depurador de vista introduzca la descripción de la imagen aquí

Está agregando su BNRHypnosisView como una subvista de la window. Más tarde, cuando la window está a punto de aparecer en la pantalla, agrega la vista del controller de vista raíz como otra subvista, frente a la vista de hipnosis. Puede ver esto en la jerarquía de vista, donde muestra una vista UIView simple después de su BNRHypnosisView . Una vista posterior en la list es "encima de" o "más cerca de la pantalla que" una vista anterior en la list.

Prueba esto:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; ViewController *controller = [[ViewController alloc] init]; [self.window setRootViewController:controller]; BNRHypnosisView *firstView = [[BNRHypnosisView alloc] initWithFrame:controller.view.bounds]; firstView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; firstView.userInteractionEnabled = YES; [controller.view addSubview:firstView]; [self.window makeKeyAndVisible]; return YES; }