좋아, 그래서 나는 몇 UIScrollViews
를 만들고 UILabels
스크롤 NumberTicker
이 이루어 지도록로 채 웁니다 NumberTicker
라는 사용자 지정 UIView
클래스를 가지고있다. 그러나 나는 scrollviews
의 속성에 제대로 액세스 할 수 없습니다.사용자 정의 UIView의 서브 클래스는, self.scrollview는 (널)
[self.scrollview setHidden:YES];
// or
[self.scrollview setContentOffset:offset];
설정하거나이 subview
로 추가되기 전에 scrollview
가 생성 될 때를 제외하고, 작동하지 않습니다 UIScrollView
의 속성을 얻을 수있는 위의 사실에서 시도.
// NumberTicker.h
#import <Foundation/Foundation.h>
#import "ProfileViewController.h"
@interface NumberTicker : UIScrollView <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *digitOne;
@property (weak, nonatomic) IBOutlet UIScrollView *digitTwo;
@property (weak, nonatomic) IBOutlet UIScrollView *digitThree;
@property (weak, nonatomic) IBOutlet UIScrollView *digitFour;
@property (weak, nonatomic) IBOutlet UIScrollView *digitFive;
@property (weak, nonatomic) IBOutlet UIScrollView *digitSix;
@property (weak, nonatomic) IBOutlet UIScrollView *digitSeven;
@property (weak, nonatomic) IBOutlet UIScrollView *digitEight;
- (id) initWithDigits:(int)digits andFrame:(CGRect)frame;
- (void) setNumberTickerTo:(int)number;
@end
과 NumberTicker.m :
// NumberTicker.m
#import "NumberTicker.h"
@implementation NumberTicker
- (id) initWithDigits:(int)digits andFrame:(CGRect)frame
{
self = [super init];
if (self) {
// add digits
[self setDigitEight:_digitEight];
[self setDigitOne:_digitOne];
if (digits > 6) {
// make 8 digit ticker
[self setFrame:frame];
for (int i = 1; i <= digits; i++) {
switch (i) {
case 1:
[self addSmallScrollView:_digitOne withXPos:(frame.size.width - (i*30))];
break;
case 2:
[self addSmallScrollView:_digitTwo withXPos:(frame.size.width - (i*30))];
break;
case 3:
[self addSmallScrollView:_digitThree withXPos:(frame.size.width - (i*30))];
break;
case 4:
[self addSmallScrollView:_digitFour withXPos:(frame.size.width - (i*30))];
break;
case 5:
[self addSmallScrollView:_digitFive withXPos:(frame.size.width - (i*30))];
break;
case 6:
[self addSmallScrollView:_digitSix withXPos:(frame.size.width - (i*30))];
break;
case 7:
[self addSmallScrollView:_digitSeven withXPos:(frame.size.width - (i*30))];
break;
case 8:
[self addSmallScrollView:_digitEight withXPos:(frame.size.width - (i*30))];
break;
default:
break;
}
}
} else {
// make 6 digit ticker
[self setFrame:frame];
for (int i = 1; i <= digits; i++) {
switch (i) {
case 1:
[self addScrollView:_digitOne withXPos:(frame.size.width - (i*40))];
break;
case 2:
[self addScrollView:_digitTwo withXPos:(frame.size.width - (i*40))];
break;
case 3:
[self addScrollView:_digitThree withXPos:(frame.size.width - (i*40))];
break;
case 4:
[self addScrollView:_digitFour withXPos:(frame.size.width - (i*40))];
break;
case 5:
[self addScrollView:_digitFive withXPos:(frame.size.width - (i*40))];
break;
case 6:
[self addScrollView:_digitSix withXPos:(frame.size.width - (i*40))];
break;
default:
break;
}
}
}
}
return self;
}
- (void) addScrollView:(UIScrollView *)scrollView withXPos:(int)xPos
{
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(xPos, 0, 40, 60)];
scrollView.contentSize = CGSizeMake(40, 660);
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.userInteractionEnabled = NO;
// All of these properties are set properly, however I can't access them again in another method or class, after the `scrollview` has been added as a `subview`
for (int i = 0; i <= 10; i++) {
// create and add labels to scrollview
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, i*60, 40, 60)];
[label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:70]];
[label setTextAlignment:NSTextAlignmentCenter];
if (i == 10) {
[label setText:@"0"];
} else {
[label setText:[NSString stringWithFormat:@"%i", i]];
}
[scrollView addSubview:label];
}
[self addSubview:scrollView];
}
- (void) addSmallScrollView:(UIScrollView *)scrollView withXPos:(int)xPos
{
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(xPos, 0, 30, 50)];
scrollView.contentSize = CGSizeMake(30, 550);
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.userInteractionEnabled = NO;
scrollView.delegate = self;
for (int i = 0; i <= 10; i++) {
// create and add labels to scrollview
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, i*50, 30, 50)];
[label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:50]];
[label setTextAlignment:NSTextAlignmentCenter];
if (i == 10) {
[label setText:@"0"];
} else {
[label setText:[NSString stringWithFormat:@"%i", i]];
}
[scrollView addSubview:label];
}
[self addSubview:scrollView];
}
- (void) setNumberTickerTo:(int)number
{
NSMutableArray *digitsArray = [[NSMutableArray alloc] init];
while (number > 0) {
[digitsArray addObject:[NSNumber numberWithInt:(number % 10)]];
number = number/10;
}
for (int i = 1; i <= [digitsArray count]; i++) {
switch (i) {
case 1:
[self.digitOne setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES]; // this doesn't work
NSLog(@"%@", self.digitOne);
[digitsArray removeObjectAtIndex:0];
break;
case 2:
[_digitTwo setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
case 3:
[_digitThree setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
case 4:
[_digitFour setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
case 5:
[_digitFive setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
case 6:
[_digitSix setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
case 7:
[_digitSeven setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
case 8:
[_digitEight setContentOffset:CGPointMake(0, [[digitsArray objectAtIndex:0] integerValue] * 60) animated:YES];
[digitsArray removeObjectAtIndex:0];
break;
default:
break;
}
}
}
@end
그때 내 ViewController.m
viewDidLoad
방법에서 NumberTicker
를 호출
- (void)viewDidLoad
{
[super viewDidLoad];
NumberTicker *numberTicker = [[NumberTicker alloc] initWithDigits:3 andFrame:CGRectMake(20, 20, 240, 60)];
[self.view addSubview:numberTicker];
[numberTicker setNumberTickerTo:345];
}
NumberTicker
보기 여기
NumberTicker.h
파일입니다 에 나타납니다. 화면은
scrollviews
처럼 모든 것이 잘 보입니다. 그러나
scrollviews
을 숨길 수는 없으며
setContentOffset
을 사용하여 스크롤하거나 애니메이션을 적용 할 수 있습니다.
대표를 설정하고, IB를 사용하여 뷰를 만든 다음 적절하게 콘센트에 연결하려고했습니다. (이후이 특정 클래스의 IB에는 관심이 없으므로 삭제했습니다. 어떤 경우에 작동합니다.
을 내가 콘솔 (NULL)로 self.digitOne을 보여줍니다
NSLog(@"%@", self.digitOne);
을 시도하십시오. 내가 잘못 뭐하는 거지
을? 어떻게 제대로 UIView
를 서브 클래스 않고 프로그래밍 012을 만들 그 안에의 속성이 있으며 나중에 다른 방법으로 편집 할 수 있습니까?
물론. 이것은 정확하게 맞았습니다. 아론 감사합니다. – stefmalawi