我有一個UICollectionViewCell
(讓我們稱之爲c
)的實例。 c
在B
類型B*
無法從類的外部訪問UIView的「中心」屬性
@property (strong) B* child;
的財產child
有一個聲明
@property (strong) C* parent;
在
C.m
我設置
self.child.parent = self
在B.m
我有代碼:
position = self.parent.center.x;
由於某種原因,我無法從實例外訪問UIVIew的center
屬性。它是私人的嗎?我查看了UIView.h
和文檔。我不認爲它是私人的。
訪問self.parent
在B.m
是給我正確的價值觀......
那麼爲什麼不能訪問它?在C.m
self.center
按預期工作...
編輯:隨着真正的代碼
這就是所謂的 「CH」
#import <UIKit/UIKit.h>
#import "UIMovableImage.h"
@interface LetterCollectionCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UIImageView *letterCellView;
@end
這是「波黑「
#import <UIKit/UIKit.h>
@class LetterCollectionCell;
@interface UIMovableImage : UIImageView
{
CGPoint currentPoint;
}
@property (strong) LetterCollectionCell* parent;
@end
這是 「C.M」
#import "LetterCollectionCell.h"
#import "LettersCollection.h"
@implementation LetterCollectionCell
-(void)PrepareImage:(int)index Hint:(BOOL)hint Rotate:(BOOL)rotate
{
if ([_letterCellView respondsToSelector:@selector(parent)])
{
UIMovableImage* temp = ((UIMovableImage*)self.letterCellView);
temp.parent = self;
}
}
@end
這裏是 「B.m」
#import "UIMovableImage.h"
#import "LetterCollectionCell.h"
@implementation UIMovableImage
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
// Get active location upon move
CGPoint activePoint = [[touches anyObject] locationInView:self.parent];
// Determine new point based on where the touch is now located
CGPoint newPoint = CGPointMake(self.parent.center.x + (activePoint.x - currentPoint.x),
self.parent.center.y + (activePoint.y - currentPoint.y));
}
@end
請注意LetterCollectionCell的letterCellView是類型的UIImageView,而不是類型UIMovableImage的。原因是我想保留這個聲明作爲佔位符。在Interface Builder中,我有兩個使用LetteCollection的場景。在一個場景中,我將imageview設置爲UIMovableImage(通過Inspector Window),而另一個場景中,我將該圖像設置爲UIImageView類型。所以運行時會根據不同的場景和我檢查的集合創建適當的類:如果圖像有一個屬性「父」 - 我設置它。否則我不。 它工作正常,分配工作得很好....但訪問不是
不要聲明的強引用'parent',它會創建一個保留週期。 – CodaFi
謝謝,不知道這意味着什麼,但肯定會找出:) –
我不明白你的問題,你的例子正確構建。 – CodaFi