我需要创建一个使用图像作为背景的UIToolbar对象.大多数按钮也是图像和矩形.但是,一个按钮是圆形的,并与工具栏重叠,就像Windows任务栏上的"开始"按钮一样.见下文.
我知道我需要将UIToolbar子类化为绘制工具栏的图像 - 我想.如果是这样,有没有人有示例代码显示如何做到这一点?
此外,有没有人对如何实现更大的圆形按钮有任何想法?我正在考虑另一个自定义子类,但不确定是否有更简单的方法.
我可以让艺术家们无论如何需要切割图像,我确信圆形按钮需要切割一些如何.
任何想法或示例代码?
我想子类化UINavigationBar(设置自定义背景图像和文本颜色)并将其用于我的应用程序中的所有导航栏.查看UINavigationController的API文档,看起来navigationBar是只读的:
@property(nonatomic,readonly)UINavigationBar*navigationBar
有没有办法在我的UIViewControllers中实际使用自定义UINavigationBar?我知道其他应用程序已经完成了自定义导航栏,如flickr:
http://img.skitch.com/20100520-bpxjaca11h5xne5yakjdc2m6xx.png
这是我的UINavigationBar子类:
#import <UIKit/UIKit.h>
@interface MyNavigationBar : UINavigationBar <UINavigationBarDelegate> {
}
@end
Run Code Online (Sandbox Code Playgroud)
实施
#import "MyNavigationBar.h"
@implementation MyNavigationBar
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect {
// override the standard background with our own custom one
UIImage *image = [[UIImage imageNamed:@"navigation_bar_bgd.png"] retain];
[image drawInRect:rect];
[image release];
}
#pragma mark -
#pragma mark UINavigationDelegate Methods
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
// use the title of the passed …Run Code Online (Sandbox Code Playgroud) 我一直回到这个问题的变种:它可能有一个非常简单的解决方案,但我似乎无法弄清楚...
我有一堆xQuantity形式的类,例如DistanceQuantity,AreaQuantity等,它们扩展了一个DimensionQuantity类.现在你可以添加或减去DistanceQuantity或AreaQuantity等,但你不能混合它们,所以我认为我需要在子类中有(短)加,减等方法,但我想减少任何逻辑重复到最低限度.但是,我需要返回子类的对象,这似乎很难从超类方法中做到.我相信这可以使用反射来完成,但AFAIK你仍然需要在子类方法的最后做一个演员,而且我被告知反射可能很昂贵......到目前为止我想出的最好的是:
在DistanceQuantity(和其他类似的):
public DistanceQuantity() {
}
public DistanceQuantity add(DistanceQuantity d1) {
DistanceQuantity dn = new DistanceQuantity();
Object o = super.add(dn, this, d1, DistanceUnit.REF_UNIT);
return (DistanceQuantity) o;
}
Run Code Online (Sandbox Code Playgroud)
在DimensionQuantity中(减去一些不太相关的语句):
public Object add(DimensionQuantity dn, DimensionQuantity d1, DimensionQuantity d2,
AbstractUnit au) {
dn.unit = au;
dn.scalar = d1.scalar + d2.scalar;
dn.units = dn.scalar;
return dn;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以提出更精简的代码 - 这仍然是类型安全的吗?TIA
我在界面构建器中使用故事板使用Xcode菜单'Editor ... Embed in ... Navigation Controller'.
似乎在iOS 6中你必须将UINavigationController子类化为允许所有方向
- (NSUInteger)supportedInterfaceOrientations {
return (UIInterfaceOrientationMaskAll );
}
Run Code Online (Sandbox Code Playgroud)
但是,如何将UINavigationController与故事板应用程序子类化,因为代码中没有对它的引用?
iphone storyboard uinavigationcontroller subclassing uiinterfaceorientation
我需要一个类似Hash的类,但不一定需要所有的Hash方法.我已经读过像Hash那样继承核心类并不是一个好主意.无论这是否属实,做这种事情的最佳做法是什么?
# (a) subclass Hash, add new methods and instance variables
class Book < Hash
def reindex
@index = .....
end
end
# (b) create a new class from scratch, containing a hash,
# and define needed methods for the contained hash
class Book
def initialize(hash)
@data = hash
end
def []=(k,v)
@data[k] = v
end
# etc....
def reindex
@index = ....
end
# (c) like (b) but using method_missing
# (d) like (b) but using delegation
Run Code Online (Sandbox Code Playgroud)
我意识到Ruby有多种方法可以完成给定的任务,但是在相对简单的情况下,是否有任何一般规则可以解决上述哪种方法?
我试图子类io.TextIOWrapper下面这篇文章,虽然我的目标是不同的.从这开始(NB:动机):
class MyTextIOFile(io.TextIOWrapper):
def read(self, *args):
cont = super().read(*args)
return cont.replace("\x00", "")
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用我的构造函数打开文件
In [81]: f = MyTextIOFile("file.csv")
Run Code Online (Sandbox Code Playgroud)
但这给了:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-90-343e18b2e32f> in <module>()
----> 1 f = MyTextIOFile("file.csv")
AttributeError: 'str' object has no attribute 'readable'
Run Code Online (Sandbox Code Playgroud)
事实上,似乎io.TextIOWrapper构造函数希望传递一个文件对象.通过反复试验,我发现这个文件对象需要以二进制模式打开.但是我无法在任何地方找到文档,而且我不想构建在无证件行为之上(实际上,尝试继续使用它已经导致我在尝试传递对象时遇到问题csv.reader).在Python 3中对文件对象进行子类化的正确和受支持的方法是什么?
我正在使用Python 3.5.0.
为什么Swift不允许我为Foo<U>类型的变量赋值Foo<T>,其中U是T的子类?
例如:
class Cheese {
let smell: Int
let hardness: Int
let name: String
init(smell: Int, hardness: Int, name: String) {
self.smell = smell
self.hardness = hardness
self.name = name
}
func cut() {
print("Peeyoo!")
}
}
class Gouda: Cheese {
let aged: Bool
init(smell: Int, hardness: Int, name: String, aged: Bool) {
self.aged = aged
super.init(smell: smell, hardness: hardness, name: name)
}
override func cut() {
print("Smells delicious")
}
}
class Platter<Food> {
var food: …Run Code Online (Sandbox Code Playgroud) 我想OnKeyPress在用户按下Tab键时接收事件.
procedure TForm1.Edit1(Sender: TObject; var Key: Char);
begin
case Key of
#09:
begin
//Snip - Stuff i want to do
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我尝试子类化Edit框,并处理WM_GETDLGCODE消息:
procedure TfrmEnableVIPMode.AccountNumberWindowProc(var Message: TMessage);
begin
case Message.Msg of
WM_GETDLGCODE: Message.Result := DLGC_WANTTAB;
else
FOldAccountNumberWindowProc(Message);
end;
end;
Run Code Online (Sandbox Code Playgroud)
我现在收到Tab KeyPress事件(正如我所希望的那样),但现在按下Left或Right光标键会使焦点转移到Tab键顺序中的上一个或下一个控件.
收到Tab键按键事件的正确方法是什么?
我试着做MSDN文档所说的内容:
wParam
用户按下的虚拟键,提示Windows发出此通知.处理程序必须有选择地处理这些键.例如,处理程序可能接受并处理VK_RETURN,但将VK_TAB委托给所有者窗口.有关值列表,请参阅虚拟键代码.lParam指向MSG结构的指针(如果系统正在执行查询,则为NULL).
但wParam和wParam均为零.
if Message.Msg …Run Code Online (Sandbox Code Playgroud) 我试图将numpy ndarray子类化,但是我无法使用其他numpy类型(如masked array或matrix)进行操作.在我看来,__ array_priority__没有被尊重.作为一个例子,我创建了一个模拟重要方面的虚拟类:
import numpy as np
class C(np.ndarray):
__array_priority__ = 15.0
def __mul__(self, other):
print("__mul__")
return 42
def __rmul__(self, other):
print("__rmul__")
return 42
Run Code Online (Sandbox Code Playgroud)
我的类和普通 ndarray 之间的操作按预期工作:
>>> c1 = C((3, 3))
>>> o1 = np.ones((3, 3))
>>> print(o1 * c1)
__mul__
42
>>> print(c1 * o1)
__rmul__
42
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用矩阵(或掩码数组)时,不尊重数组优先级.
>>> m = np.matrix((3, 3))
>>> print(c1 * m)
__mul__
42
>>> print(m * c1)
Traceback (most recent call last):
...
File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 330, in …Run Code Online (Sandbox Code Playgroud) 努力让子类损失函数在 Tensorflow (2.2.0) 中工作。最初尝试了这段代码(我知道它对其他人有用 - 请参阅https://github.com/keras-team/keras/issues/2115#issuecomment-530762739):
import tensorflow.keras.backend as K
from tensorflow.keras.losses import CategoricalCrossentropy
class WeightedCategoricalCrossentropy(CategoricalCrossentropy):
def __init__(self, cost_mat, name='weighted_categorical_crossentropy', **kwargs):
assert(cost_mat.ndim == 2)
assert(cost_mat.shape[0] == cost_mat.shape[1])
super().__init__(name=name, **kwargs)
self.cost_mat = K.cast_to_floatx(cost_mat)
def __call__(self, y_true, y_pred):
return super().__call__(
y_true=y_true,
y_pred=y_pred,
sample_weight=get_sample_weights(y_true, y_pred, self.cost_mat),
)
def get_sample_weights(y_true, y_pred, cost_m):
num_classes = len(cost_m)
y_pred.shape.assert_has_rank(2)
y_pred.shape[1].assert_is_compatible_with(num_classes)
y_pred.shape.assert_is_compatible_with(y_true.shape)
y_pred = K.one_hot(K.argmax(y_pred), num_classes)
y_true_nk1 = K.expand_dims(y_true, 2)
y_pred_n1k = K.expand_dims(y_pred, 1)
cost_m_1kk = K.expand_dims(cost_m, 0)
sample_weights_nkk = cost_m_1kk * y_true_nk1 * y_pred_n1k
sample_weights_n …Run Code Online (Sandbox Code Playgroud) subclassing ×10
iphone ×3
python ×2
arrays ×1
cocoa-touch ×1
delphi ×1
delphi-5 ×1
duck-typing ×1
generics ×1
hash ×1
image ×1
io ×1
java ×1
matrix ×1
numpy ×1
python-3.x ×1
ruby ×1
storyboard ×1
swift ×1
uitoolbar ×1