Ich möchte globale Variable für Koordinaten UIView erstellen, wie korrekte Syntax dies tun?Globale Variable in Objective-C in ios proj
Antwort
Zuerst müssen Sie NSObject Klasse
Geben Klassenname GlobalShareClass
GlobalShareClass.h
#import <Foundation/Foundation.h>
@interface GlobalShareClass : NSObject
{
}
@property (nonatomic) float xvalue
@property (nonatomic) float yvalue
+ (GlobalShareClass *)sharedInstance;
@end
GlobalShareClas.m
#import "GlobalShareClass.h"
static GlobalShareClass *_shareInstane;
@implementation GlobalShareClass
@synthesize xvalue;
@synthesize yvalue;
+ (GlobalShareClass *)sharedInstance
{
if (_shareInstane == nil)
{
_shareInstane = [[GlobalShareClass alloc] init];
}
return _shareInstane;
}
ViewController.h
zu schaffen#import <UIKit/UIKit.h>
#import "GlobalShareClass.h"
@interface ViewController : UIViewController
{
GlobalShareClass *globalShare;
}
@end;
ViewController.m
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
globalShare = [GlobalShareClass sharedInstance];
globalShare.xvalue = 50.0;
globalShare.xvalue = 100.0;
}
Wahrscheinlich wäre das richtige Ding hier eine Eigenschaft auf Klassenebene. Weitere Informationen finden Sie unter here.
Statt zwei Schwimmer zu verwenden, würde ich Koordinaten in einem Behälter empfehlen diese ausschließlich für die Speicherung gemacht: CGPoint
.
Um es global zu verwenden, können Sie es zu einem Singleton hinzufügen (wie in Antwort @ user3182143), oder es von Ihrer Klasse aussetzen.
In Ihrem .m
Sie es als Konstante definieren können (außerhalb sowohl der @interface
und @implementation
) wie folgt:
const CGPoint kMyCoordinate = {.x = 100, .y = 200};
Um für andere Klassen der Lage sein, es zu benutzen, müssen Sie aussetzen es in der .h
wie folgt:
extern const CGPoint kMyCoordinate;
Während Sie normalerweiseerstellen 0 mit CGPointMake(x,y)
in diesem speziellen Fall müssen wir die Kurzschrift verwenden, weil sonst Xcode beklagt, dass das "Initialisierungselement keine Kompilierzeitkonstante ist".
Ich denke, Ihre Antwort ist am bequemsten. Ich dachte an CGPoint. –
in meinem ".h" ich füge @property hinzu (nicht atomisch, zuweisen) CGPoint * lastScrollOffset; und in meiner ".m" muss ich ihn anrufen und der aktuellen Position zuordnen, wie sieht meine Katze aus? –
Wenn Sie Eigenschaften anstelle von Klassenkonstanten verwenden möchten, definieren Sie die Eigenschaft im '.h':' @property (nonatomic) CGPoint myCoordinate; ' Und in' .m': 'self.myCoordinate = CGPointMake (100 , 200); ' –