nsbutton مع عرض حجم متغير ، زوايا مستديرة
سؤال
ما هي أفضل طريقة لإنشاء nsbutton مع صورة خلفية مخصصة ، والتي يمكن أن يكون لها عرض متغير ، دون أن تبدو الزاوية مديرة ممتدة؟ أعلم أن هناك طرقًا ملائمة للقيام بذلك مع Uibultdon: http://jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html لكنني لم أر أي شيء مشابه في NSButton.
المحلول
كنت بحاجة إلى الحصول على خلفية زر مخصصة ، وإليك كيف فعلت ذلك. لقد قمت بعمل فئة فرعية NSBUTTON وأسلوب السحب المتجاوز:
- (void)drawRect:(NSRect)dirtyRect
{
// My buttons don't have a variable height, so I make sure that the height is fixed
if (self.frame.size.height != 22) {
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width,
22.0f);
}
//
switch (self.state) {
// Onstate graphics
case NSOnState:
NSDrawThreePartImage(self.bounds,
[NSImage imageNamed:@"btnmain_lb_h.png"], [NSImage imageNamed:@"btnmain_bg_h.png"], [NSImage imageNamed:@"btnmain_rb_h.png"],
NO, NSCompositeSourceAtop, 1.0, NO);
// Offstate graphics
default:
case NSOffState:
NSDrawThreePartImage(self.bounds,
[NSImage imageNamed:@"btnmain_lb.png"], [NSImage imageNamed:@"btnmain_bg.png"], [NSImage imageNamed:@"btnmain_rb.png"],
NO, NSCompositeSourceAtop, 1.0, NO);
break;
}
[super drawRect:dirtyRect];
}
بعد ذلك ، يمكنني وضع الأزرار باستخدام Builder Interface ، وللحصول على الرسومات المخصصة ، علي فقط تغيير الفصل إلى الفئة الفرعية الجديدة.
نصائح أخرى
هذا عمل بشكل جيد بالنسبة لي:
[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
NSButton
ليس لديه نفس طرق الراحة لصور الخلفية مثل UIButton
(وهو أمر غريب وهنا على أمل جسور Apple تلك الفجوة). ستحتاج إلى إنشاء زر مخصص NSView
والتعامل مع العرض المتغير والزوايا بنفسك. لا أعتقد أن الأمر سيكون سهلاً ، لكنني لا أعتقد أنه سيكون من الصعب للغاية أيضًا.
يشرح هذا الفيديو طريقة يبدو أنها بسيطة وتتطلب صورة واحدة فقط للزر: http://youtu.be/7mzjxpoo_xu