사용자 정의 컨트롤 주제 요약
10771 단어 Objective-C
@interface StarRating:UIView{
int numberStars;
int rating;
}
@property int numberStars;
@property int rating;
- (id)initWithNumberOfStars:(int)numStars;
- (id)initWithNumberOfStars:(int)numStars initialRating:(int)initialRating;
@end
@implementation StarRating
- (void)drawRect:(CGRect)rect {
UIImage *onImage = [UIImage imageNamed:@"on.png"];
UIImage *offImage = [UIImage imageNamed:@"off.png"];
for (int i=1; i<=[self numberStars]; i++) {
UIImage *img = (i <= [self rating]) ? onImage : offImage;
CGPoint imagePoint;
imagePoint.x = BTN_WIDTH * (i-1);
imagePoint.y = 0.0f;
[img drawAtPoint:imagePoint];
}
}
@end
그 중에서 묘사 부분은 성급 rating에 따라 그림을 선택하고 성급 이하는 on을 사용한다.png, 성급 이상의off.png. 조합 구현:
@interface StarRating: UIControl {
NSMutableArray *starArray;
NSInteger numberStars;
NSInteger rating;
}
-(id)initWithFrame:(CGRect)frame andStars:(NSInteger)inNumStars;
@end
@implementation StarRating
-(id)initWithFrame:(CGRect)frame andStars:(int)inNumStars {
if (self = [super initWithFrame:frame])
{
approxMode = InterpolationMode_Half;
starNum = inNumStars;
[self prepareStars:starNum frame:frame];
}
return self;
}
-(void)setRating:(int)aRating{
rating= aRating;
[self fillStars];
}
- (void) prepareStars: (int)aStarNum frame: (CGRect)frame {
starArray = [[NSMutableArray alloc] initWithCapacity:aStarNum];
float width = frame.size.width/aStarNum;
float height = frame.size.height;
for(int i=0; i < aStarNum; i++) {
UIImageView * star = [[UIImageView alloc] initWithFrame:CGRectMake(0+(i*width), 0, width, height)];
[starArray addObject:star];
[self addSubview:star];
[star release];
}
}
- (void)fillStars{
UIImage *onImage = [UIImage imageNamed:@"on.png"];
UIImage *offImage = [UIImage imageNamed:@"off.png"];
for (int i=1; i<=[self numberStars]; i++) {
UIImage *img = (i <= [self rating]) ? onImage : offImage;
UIImageView *star = (UIImageView *)[self subViewAtIndex:i];
[star setImage:img];
}
}
여기서 는 5개의 UIImageView 하위 컨트롤을 미리 만든 다음 성급 rating에 따라 하위 컨트롤의 그림 속성을 설정합니다.대비: 1 재구성 방안은 자신에게 하나의 컨트롤러만 있고 조합 실현은 다섯 개의 하위 컨트롤러를 포함한다.자원과 효율을 다시 그리는 방안이 비교적 우세할 것이다.2 다시 그리기는 묘사를 처리해야 하고 조합은 하위 컨트롤이 묘사를 책임진다.따라서 묘사 처리에서 조합 방안이 비교적 간단할 때 3가지 수요 변경이 필요할 때 재구성 방안은 묘사 코드를 수정해야 할 수 있고 조합 방안은 합리적인 디자인에서 하위 컨트롤을 쉽게 바꿀 수 있는 유형이다.아이폰에서 자동 그리기 실현 절차 1.계승@interface MyView: UIView {2. 실현-(void)drawRect: (CGRect)rect 3. 새로 생성된view를 디스플레이에 추가하기 위해ddSubView를 호출합니다
addSubView[window addSubview:viewController.view];
4. 샘플 코드
- (void)drawRect:(CGRect)rect {
// create the bitmap context
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(nil,100,100,8,400, colorSpace,kCGImageAlphaPremultipliedLast);
CFRelease(colorSpace);
// create an arrow image
// set the fill color
CGColorRef fillColor = [[UIColor blackColor] CGColor];
CGContextSetFillColor(context, CGColorGetComponents(fillColor));
CGContextBeginPath(context);
CGContextMoveToPoint(context, 8.0f, 13.0f);
CGContextAddLineToPoint(context, 24.0f, 4.0f);
CGContextAddLineToPoint(context, 24.0f, 22.0f);
CGContextClosePath(context);
CGContextFillPath(context);
CGContextSelectFont ( context, "Arial", 10.f, kCGEncodingMacRoman );
CGContextSetRGBFillColor ( context, 0.0f, 0.0f, 0.f, 1.f );
CGContextSetShouldAntialias ( context, 0 );
CGContextShowText(context, "hh", 2);
// convert the context into a CGImageRef
CGImageRef image = CGBitmapContextCreateImage(context);
CGContextRelease(context);
UIImage* image2 = [UIImage imageWithCGImage:image];
[image2 drawInRect:CGRectMake(0, 0, 120, 160)];
NSString* myStr = @" ";
UIFont* font = [UIFont systemFontOfSize:12.0];
[myStr drawInRect: CGRectMake(160, 240, 100, 130) withFont:font lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];
사용자 정의 컨트롤 아이폰/ipad 1, 가장 흔히 볼 수 있는 것은 button이고 가장 간단한 것이다. 애플은 이미 봉인되어 있다. 애플의 type을custom으로 설정하고 백그라운드를 설정하면 된다.2, segemented control,xib에 대응하는 segement에 이미지를 설정하면 됩니다. 그러나 주의해야 할 것은 모든 그림의 폭이 70일 수 있다고 가정하면 segemented control의 폭은 조금 짧아야 합니다. 66이면 됩니다.내가 예전에 실천할 때 그 자체의 넓이에 따라 설정하면 중간 연결 부분이 보기 싫었다.3, navigation bar 사용자 정의도 매우 흔합니다. 제가 사용하는 방법은 이미지뷰를 정의한 다음에 insertSubview를 0층으로 하는 것입니다.그러나 이런 방법으로는 시스템navigation bar 자체의 제목을 단추로 덮는 것이 좋지 않다.그래서 우리는 때때로 제목, 단추를 다시 사용자 정의한 다음에addsubview를bar에 올려야 한다. 구체적으로 내가 아래에 준 demo를 참고할 수 있다.4. 검색 바는 사용자 정의로 처음에 정의할 수 없다고 생각했는데 나중에 qq음악에서 예쁜 검색 바를 보고 연구를 시작했습니다.내비게이션 표시줄과 유사합니다. 이번에는 insertSubview를 1층으로 이동해야 합니다. 이미지view의 폭은 search bar의 기본 높이 44로 설정하는 것이 좋습니다.다음에 우리는 그 위에 있는 단추를 사용자 정의할 수 있다. 우리는 그 하위 보기를 출력하고, 단추의 층을 찾아서, 단추를 꺼내서 다시 정의할 수 있다.5, 그리고 흔히 볼 수 있는 사용자 정의가 필요한,tableViewCell.사용자 정의cell의 방법은 사실 매우 많다. 나는 주로 내가 자주 사용하는 방법을 말한다. 먼저xib 파일을 추가하는데 그 안에는tableviewcell만 있다. 이 xib 파일에 대응하는 주요 클래스는 사용자 정의가 필요한 클래스가어야 한다. cell에 사용자 정의 그림과 label을 설정하고 대응하는 tag를 1과 2로 설정한다.그 주 클래스에서uitableviewcell을 정의하고 아까의xib 파일에 연결합니다.6.tabbarcontroller도 사용자 정의할 수 있다. 내가 말한 것은 내가 성공한 방법을 실천한 것이다. tabbarcontroller 종류의 파일을 다시 쓰는 것은 주로tababr을 숨기는 것이다.다음은 app 파일에viewcontroller를 정의하고 방금tabbarcontroller의 클래스 파일인 insert를 0층으로 이동하면 됩니다.구체적으로는 나의 이전 데모를 참고할 수 있다.오늘은 슬라이딩 스크롤리뷰와 페이지 나누기 효과에 대해 말씀드리겠습니다. xib에 스크롤리뷰를 그린 후에 저희가...m 파일에서 그림 데이터를 초기화합니다.간단하게 설명하자면, 두 개의 순환은 그림을 scrollview에 추가하는 것입니다. 그 중에서ImageViewForScrollView는 그림의 클릭 이벤트를 처리하는 데 사용되는 사용자 정의 이미지뷰입니다.안에서 가장 관건적인 것은 어떻게 모든 그림의 위치를 설정하는가이다. scrollview의 콘텐츠 Size를 설정하는 것을 잊지 마라. 반드시 실제 내용의 폭과 일치해야 한다. 또한scrollview의 폭보다 크다. 그렇지 않으면 미끄러지지 않는다.그림 아래 부분에 페이지 컨트롤러를 추가하면 페이지 컨트롤러를 어떻게 제어할 것인가? 대부분의 IOS 응용 프로그램의 개발 과정에서 IB를 사용하지 않기 때문에 코드를 사용하여 인터페이스 컨트롤러를 사용자 정의하는 것이 특히 중요하다.본고는 코드로 BUTTON 컨트롤을 사용자 정의하는 방법을 소개한다.
UIButton *pBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; // button
[pBtn setTitle:@"MyButton" forState:UIControlStateNormal];
[pBtn setFrame:CGRectMake(10, 20, 80, 30)];
[pView addSubview:pBtn];
// :
[pBtn addTarget:self action:@selector(buttonTest:)forControlEvents:UIControlEventTouchUpInside];
- (void)buttonTest:(id)sender
{
NSLog(@"button test");
}
사용자 지정 버튼 2
UIButton *Btn;
CGRect frame;
Btn = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; //
[Btn setImage:[UIImage imageNamed:@“aaa.png”] forState:UIControlStateNormal];//
Btn.tag = 10;
frame.size.width = 59; //
frame.size.height = 59; //
frame.origin.x =150; //
frame.origin.y =260;
[Btn setFrame:frame];
[Btn setBackgroundColor:[UIColor clearColor]];
[Btn addTarget:self action:@selector(btnPressed:)forControlEvents:UIControlEventTouchUpInside]; //
[self.view addSubview:Btn];
[Btn release];
-(void)btnPressed:(id)sender
{
//
}
코드로 TextField 컨트롤과 Button 컨트롤을 생성했는데 트리거 이벤트는 어떻게 추가합니까?
UITextField *textField=[[UITextField alloc] init];//
[textField addTarget:selfaction:@selector(valueChanged:)forControlEvents:UIControlEventValueChanged];// textField
-(void)valueChanged:(id)sender {
//.... statement
}
코드에 생성된 button 컨트롤, 후면 (send to back)
[self.view sendSubviewToBack:button];
button 컨트롤은 코드로 Custom 속성을 설정합니다.
UIImage *buttonUpImage = [UIImageimageNamed:@"button_up.png"];
UIImage *buttonDownImage =[UIImage imageNamed:@"button_down.png"];
// , 。
UIButton *button = [UIButtonbuttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0,0.0, buttonUpImage.size.width, buttonUpImage.size.height);
[buttonsetBackgroundImage:buttonUpImageforState:UIControlStateNormal];
[buttonsetBackgroundImage:buttonDownImageforState:UIControlStateHighlighted];
[button setTitle:@"Tap"forState:UIControlStateNormal];
[button addTarget:selfaction:@selector(buttonTapped:)forControlEvents:UIControlEventTouchUpInside]; //
[button addTarget:self action:@selector(buttonTapped:)forcontrolEvents:UIControlEventTouchUpInside]
button Tapped. 이것은 button의 UIControl Event Touch UpInside 이벤트에 대한 사용자 정의 응답 함수입니다.
From http://www.cocoachina.com/bbs/read.php?tid=49128&page=1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.