У меня есть несколько подпредставлений, которые управляются контроллером навигации. Один из них падает на резюме. Это класс, который «поворачивает» модель на 360 градусов (мыслить глобусом), продвигая серию изображений и контроллер панорамирования.
Все хорошо, пока я не нажму эту надоедливую кнопку домой. Когда я нажимаю кнопку «Домой», у меня есть, пока изображение не будет установлено в UIView, прежде чем оно падает ... По крайней мере, в большинстве случаев. Иногда он будет меняться один раз, а второй - будет зависать, очевидно, просто чтобы сделать мою жизнь более интересной.
Любое понимание, которое вы могли бы пролить на это, было бы замечательно.
Заранее спасибо.
// RotationController.m
//
#import "RotationController.h"
@implementation RotationController
@synthesize myRotationView;
@synthesize imageName;
@synthesize scheme;
int maxFrame;
int currentX;
- (void)viewDidLoad {
[super viewDidLoad];
//self.title = @"Cutaway View";
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panPiece:)];
[myRotationView addGestureRecognizer:panGesture];
[panGesture release];
}
-(void)setup:(int) currentNode{
if (currentNode <= 2)
{
currentX = 0;
maxFrame = 199;
scheme = @"Trailer1Rotation_";
self.title = @"Trailer One Cutaway View";
[self.myRotationView setImage:[UIImage imageNamed:@"Trailer1Rotation_000.jpg"]];
}
else if (currentNode > 2 && currentNode <= 5)
{
currentX = 0;
maxFrame = 199;
scheme = @"spinTrailer2_00";
self.title = @"Trailer Two Cutaway View";
[self.myRotationView setImage:[UIImage imageNamed:@"spinTrailer2_00000.jpg"]];
}
else if (currentNode > 5 && currentNode <= 8)
{
currentX = 0;
maxFrame = 199;
scheme = @"spinTrailer3_00";
self.title = @"Trailer Three Cutaway View";
[self.myRotationView setImage:[UIImage imageNamed:@"spinTrailer3_00000.jpg"]];
}
else if (currentNode > 8)
{
currentX = 0;
maxFrame = 199;
scheme = @"spinTrailer4_00";
self.title = @"Trailer Four Cutaway View";
[self.myRotationView setImage:[UIImage imageNamed:@"spinTrailer4_00000.jpg"]];
}
}
-(void)viewWillAppear:(BOOL)animated {
self.myRotationView.userInteractionEnabled = YES;
}
-(void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"Test - DidEnterBackGround");
}
-(void)applicationWillResignActive
{
NSLog(@"Test - WillResignActive");
}
- (void)applicationDidBecomeActive
{
NSLog(@"Test - DidBecomeActive");
[self.myRotationView setImage:[UIImage imageNamed:@"Trailer1Rotation_000.jpg"]];
}
-(void)panPiece:(UIPanGestureRecognizer *) gesture{
switch(gesture.state) {
case UIGestureRecognizerStateChanged: {
//CGPoint center = gesture.view.center;
CGPoint translation = [gesture translationInView:gesture.view];
// center = CGPointMake((center.x + translation.x),
// (center.y + translation.y));
// gesture.view.center = center;
// [gesture setTranslation:CGPointZero inView:gesture.view];
NSLog(@"Changed");
NSLog(@"%f", translation.x);
NSLog(@"%f", translation.y);
int changeX = (int)translation.x / 20;
if (changeX == 0)
changeX = 1;
currentX = (int)currentX + (int)changeX;
while (currentX > 174) {
currentX = currentX - 174;
}
while (currentX < 0) {
currentX = currentX + 174;
}
if (currentX < 10) {
imageName = [NSString stringWithFormat:@"%@00%i.jpg", scheme, currentX];
NSLog(@"%@", imageName);
} else if (currentX < 100) {
imageName = [NSString stringWithFormat:@"%@0%i.jpg", scheme, currentX];
NSLog(@"%@", imageName);
} else {
imageName = [NSString stringWithFormat:@"%@%i.jpg", scheme, currentX];
NSLog(@"%@", imageName);
}
//NSLog(@"%@", myRotationView.image);
[self.myRotationView setImage:[[UIImage imageNamed:imageName]autorelease]];
//NSLog(@"%@", myRotationView.image);
}
case UIGestureRecognizerStateBegan: {
[gesture setTranslation:CGPointZero inView:gesture.view];
NSLog(@"Began");
break;
}
case UIGestureRecognizerStateEnded: {
//CGPoint velocity = [gesture velocityInView:self.view];
//The user lifted their fingers. Optionally use the velocity to contain rotating the globe automatically
NSLog(@"Ended");
break;
}
default: {
//Something else happened. Do any cleanup you need to.
NSLog(@"Something else happened.");
}
}
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code.
}
*/
- (void)dealloc {
[super dealloc];
NSLog(@"Rotation Controller - DeAlloc");
[myRotationView release];
[scheme release];
[imageName release];
}
@end
Обратный след:
2011-04-21 14:38:39.442 MCIT[52259:207] Test - DidBecomeActive
Program received signal: “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x01326a78 in objc_msgSend ()
#1 0x0633d540 in ?? ()
#2 0x000138b2 in -[RotationController applicationDidBecomeActive] (self=0x6607dc0, _cmd=0x17540) at /Users/jacob/Documents/iOS Dev/MCIT/Classes/RotationController.m:83
#3 0x00002a1c in -[MCITAppDelegate applicationDidBecomeActive:] (self=0x6603f30, _cmd=0x6e25a7, application=0x6300700) at /Users/jacob/Documents/iOS Dev/MCIT/Classes/MCITAppDelegate.m:100
#4 0x002d2542 in -[UIApplication _setActivated:] ()
#5 0x002dfe18 in -[UIApplication _handleApplicationResumeEvent:] ()
#6 0x002df7d4 in -[UIApplication handleEvent:withNewEvent:] ()
#7 0x002d7202 in -[UIApplication sendEvent:] ()
#8 0x002dc732 in _UIApplicationHandleEvent ()
#9 0x01afaa36 in PurpleEventCallback ()
#10 0x01afaabd in PurpleEventSignalCallback ()
#11 0x011a601f in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ ()
#12 0x0110428b in __CFRunLoopDoSources0 ()
#13 0x01103786 in __CFRunLoopRun ()
#14 0x01103240 in CFRunLoopRunSpecific ()
#15 0x01103161 in CFRunLoopRunInMode ()
#16 0x01af9268 in GSEventRunModal ()
#17 0x01af932d in GSEventRun ()
#18 0x002e042e in UIApplicationMain ()
#19 0x00001f0e in main (argc=1, argv=0xbffff070) at /Users/jacob/Documents/iOS Dev/MCIT/main.m:14
это не так, как я думал в своем тестовом коде ... когда изображение установлено.
- (void)applicationDidBecomeActive
{
NSLog(@"Test - DidBecomeActive");
[self.myRotationView setImage:[UIImage imageNamed:@"Trailer1Rotation_000.jpg"]];
}